new Object() 问题(不好意思,只能发100)
一个Object(不包含子类) 占内存24字节,为什么?都布置了什么数据?
请高人指点
------解决方案--------------------class Object包含的方法
clone()
创建与该对象的类相同的新对象。
equals(Object)
比较两对象是否相等。
finalize()
当垃圾回收器确定不存在对该对象的更多引用时,对象的垃圾回收器调用该方法。
getClass()
返回一个对象的运行时间类。
hashCode()
返回该对象的散列码值。
notify()
激活等待在该对象的监视器上的一个线程。
notifyAll()
激活等待在该对象的监视器上的全部线程。
toString()
返回该对象的字符串表示。
wait()
等待这个对象另一个更改线程的通知。
wait(long)
等待这个对象另一个更改线程的通知。
wait(long, int)
等待这个对象另一个更改线程的通知。
更详细的自己查下api.............
------解决方案--------------------我自己这样建立的Object object = new Object();
多少位不知道,不过值是这个样子的。我复制出来的:
object Object (id=15)
------解决方案--------------------关注中。。。
我觉得看API帮助不是太大,要是有实例是最好的啊~~~
------解决方案--------------------它里面有几个方法,这些方法也得占用内存啊。
------解决方案--------------------里面有一些方法,会占内存的,可是研究这个又有什么价值呢
------解决方案--------------------楼上的可否详细讲一下
------解决方案--------------------方法不占内存,那方法放哪?
硬盘上?CPU缓存?
方法也是数据哦。
------解决方案--------------------方法都放在方法区,所有实例共享的,占用很少的内存
------解决方案--------------------要存方法首地址吧 要不对象怎么找到方法
------解决方案--------------------个人觉得Object的方法之类的数据会在JVM里面特殊处理。
java/lang包里面的东西在JVM启动的时候就装载到内存中了。
建议楼主自己写一个类:A extends Object。然后添加一些简单的成员,比如 int long之列的。还可以添加一些空的函数。
这样看看内存的情况。
------解决方案--------------------方法是不占内存的,只有数据占内存
-----------------------
唔,有道理
------解决方案--------------------赞同tangqii(恋上另一个人)的看法,我想:
当Object obj=new Object()的时候,是创建了一个新的对象了。而在创建新对象之前,首先虚拟机会装入类文件。无论如何,class肯定是被装入到了一块内存里。这块内存也许是连续的,也许是不连续的,不过肯定有个唯一的首地址来标识它。那么,这个唯一的地址将会被保存到obj所占用的内存里。但我还不清楚这个地址会占多少B。在现在的32位Windows下,应该是4B,那么那20个B被哪条狗狗吃掉了就不得而知了。
多说两句,当我们调用一个obj的方法,比如obj.clone()的时候,obj本身首先会被解释成一个地址,即class文件内存映像的入口地址,而clone将被解释成clone方法在内存中保存位置首地址相对于class文件内存映像入口地址的偏移量,然后寻址就可以执行方法里的代码了。
------解决方案--------------------挺好,有意思
------解决方案--------------------20里是不是要分两部分,数据区、方法索引。
如果方法索引每个占4B的话,那obj最多只能有5个方法了。看来不是每个方法一个索引。
那么,所有的方法存放在一个不同与这20B的方法区内,而只能有一个索引指向其首地址。这样还剩16B,都留给数据好了。
------解决方案--------------------方法肯定要占用内存的。
------解决方案--------------------MARK
------解决方案--------------------顶,结分,但是不知道了解这个对编程有什么好处?
------解决方案--------------------一个类的方法是给这个类的所有实例共享的,方法不占内存。
可以看 http://www.javaeye.com/topic/14707
这里面robbin的回复。
robbin说:不要想当然的臆测自己不了解的知识,动手去做!