高分请教jvm内存问题

NickPac1012 2005-04-18 03:06:31
如何通过一个对象实例,获得该实例目前在jvm占用内存大小?考虑到该实例可能具有String或者数组类型,java.lang.reflect应该不能解决。
...全文
257 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2005-05-11
  • 打赏
  • 举报
回复
我看 WebSphere Profile 模式启动 可以看到 一个 Object 8 bytes, 如果包含一个 简单属性 就变成了 16 bytes. 比如一个 Integer 16.
007remember 2005-04-23
  • 打赏
  • 举报
回复
如何通过一个对象实例,获得该实例目前在jvm占用内存大小?考虑到该实例可能具有String或者数组类型,java.lang.reflect应该不能解决。

关于这个问题,String有点特殊,以前也有帖子讨论过创建几个String对象的问题,楼主可以查查看。
String对象的值是一个个char值,它占用的内存空间是按照基本变量char来分配空间,关于数组,也特殊。它是根据数组声明是的类型以及数组的引用来分配的,例:声明了int [] i1 = new int[]{1,2};
类型分配就是按照int型初始化的,在这里分配空间是i1[0],i1[1]
007remember 2005-04-23
  • 打赏
  • 举报
回复
理论上是的。我只传入一个句柄,要得到该句柄对应的实例占用的jvm内存。 不知道有没有现成的包可以用?或者如何自己写代码来解决?

关于这个问题,建议楼主看看这本书:《java virtual machine》
这上面有比较详细的描述:
3.4 Reference Types and Values
There are three kinds of reference types: class types, array types, and interface types. Their values are references to dynamically created class instances, arrays, or class instances or arrays that implement interfaces, respectively. A reference value may also be the special null reference, a reference to no object, which will be denoted here by null. The null reference initially has no runtime type, but may be cast to any type (§2.4).
这本书也有中文版,个人感觉:很不错(如果想深入了解jvm的话)

一个字通常都是主机平台的指针大小,在32位平台上,字是32位,指针是32位
wangsheng1028 2005-04-23
  • 打赏
  • 举报
回复
这个问题问的有点经典。
原来还是真的没有去关心内存问题。
只是知道jvm会自己搞定这些事情。
mrmraywu 2005-04-23
  • 打赏
  • 举报
回复
用Borland Optimizeit Profiler 来作性能测试吧,超级强悍,不要说一个对象实例,
整个程序的内存使用情况,内存释放情况,甚至那个函数的cpu使用时间片都一目了然,
强烈推荐。
humanity 2005-04-23
  • 打赏
  • 举报
回复
好多星星,明天晴天
007remember 2005-04-23
  • 打赏
  • 举报
回复
再补充点
上面的数组引用分配空间也就2个吧:i1[0],i1[1]

以上资料来自《java virtual machine》
希望对楼主有帮助
blackhost 2005-04-21
  • 打赏
  • 举报
回复
我昨晚上想到一个笨办法,那就是在判断前先得到当前的内存数量,然后使用深度拷贝原来实例,然后再得到当前的内存数量,用前一个减后一个就可以得到实例所耗费的内存,然后把深度拷贝过来的实例垃圾回收掉就可以了!但是这样一来估计还是不是很准确,怕就在你的拷贝过程中垃圾回收器把别的对象回收了,这样最后的结果也就不准了!
bigc2000 2005-04-20
  • 打赏
  • 举报
回复
不知道,个能认为你说说的是不是指类似于 sizeof()的功能
但不知道,你要这个有什么用,
tomuno 2005-04-19
  • 打赏
  • 举报
回复
java.lang.Runtime.totalMemory()
dj0517 2005-04-19
  • 打赏
  • 举报
回复
推荐楼主看下王森的《Java深度历险》,里面有讲关于JVM及运行原理。
blackhost 2005-04-19
  • 打赏
  • 举报
回复
比较复杂,需要作对象实例遍历,也就是类似JVM的垃圾回收机制
NickPac1012 2005-04-18
  • 打赏
  • 举报
回复
1.4.2能搞定也行啊,呵呵
hawaii_wx 2005-04-18
  • 打赏
  • 举报
回复
没用1.5的,还是用的1.4.2的
NickPac1012 2005-04-18
  • 打赏
  • 举报
回复
好像jdk1.5.0的JVMTI可以完成类似功能。不知道有没有人能来讲解一下,多谢:)
jFresH_MaN 2005-04-18
  • 打赏
  • 举报
回复
基本上很难
因为至少API没有提供这样的方法
wjvonline 2005-04-18
  • 打赏
  • 举报
回复
好议题!关注中~
cathy97 2005-04-18
  • 打赏
  • 举报
回复
关注
NickPac1012 2005-04-18
  • 打赏
  • 举报
回复
理论上是的。我只传入一个句柄,要得到该句柄对应的实例占用的jvm内存。 不知道有没有现成的包可以用?或者如何自己写代码来解决?
jFresH_MaN 2005-04-18
  • 打赏
  • 举报
回复
是不是任何对象你都要得到它的占用内存大小?
包括自己的类的对象?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧