100分救助:引用变量的内存大小

yqj2065 2005-11-25 06:04:37
讨论仅仅局限于程序员层面(即不考虑实际存储空间的大小)。

int的内存是4字节,那么引用变量的内存是几个字节?
有人说,一般是两个字节(与具体JVM有关),
我救助的是:
那本书或文章(请提供页码)讨论/介绍了这个问题,提供资料者100分全送。
...全文
292 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_you 2005-11-26
  • 打赏
  • 举报
回复
可以这样测试
void a()
{
System.out.println(Runtime.getRuntime().freeMemory());
Object a=null;
System.out.println(Runtime.getRuntime().freeMemory());
int i=0;
System.out.println(Runtime.getRuntime().freeMemory());
}
laidlgx 2005-11-26
  • 打赏
  • 举报
回复
还有一个问题:
Object[] objArray = new Object[1024 * 1024 * 10];
System.out.println((double)(m2 - m1) / (1024 * 1024 * 10));
我将1024 * 1024 * 10改为10或者100
结果却是:
m1=2031616
m2=2031616 //怎么等于M1????
m1 - m2=0
(double)(m2 - m1) / (1024 * 1024 * 10)=0.0 //????怎么会是0




laidlgx 2005-11-26
  • 打赏
  • 举报
回复
为什么啊???

to gtlang78() :
我查了一下:

public long totalMemory(),Returns:
the total amount of memory currently available for current and future objects, measured in bytes.

我的E文一斑斑,对上面我是这样理解的:
就是这个个方法返回的当前可用的MEMORY
如果是这样的话,应该是m1>m2啊
可是我在计算机运行 发现
结果却是m1<m2
为什么啊???
gemouzhi 2005-11-26
  • 打赏
  • 举报
回复
早已给Bruce Eckel去信的说,该提的全提了,^_^希望Bruce能写出更好的书。

regards
gemouzhi 2005-11-26
  • 打赏
  • 举报
回复
HOHO. no, 我简直对你说的"引用变量"词太不敏感了,我贴的那是关于对象的大小的。

HOHO,sorry。

你引用变量你是专指ref吗?就是4个字节。这个有官方的文档。

但是并不是每个primitive都是4个字节,如long就不是4个字节。

但如果你说的是引用变量就是ref的话,那绝对4个字节。就连byte也是4个字节.

HOHO,从没用过 引用变量 这个词。

regards
yqj2065 2005-11-26
  • 打赏
  • 举报
回复
Sizeof for Java

The sizeof operator is not available in Java, but sometimes you may want to know the size of Java objects. The size of an object depends on the number of header words in an object, pointer size (32/64 bit), and alignment variations that make object size dependent on VM implementation.

With JDK 5.0, you can get size in two new ways without using profilers or native agents:

Use java.lang.instrument.Instrument.getObjectSize API.

Use jmap -histo to get object histogram. For each class, jmap prints number of objects and total size in bytes occupied by those objects. Divide total size by number of objects to get size of an individual object.

yqj2065 2005-11-26
  • 打赏
  • 举报
回复
overhead about 8 bytes per object
object reference 4, or 8 bytes in a 64-bit system
return address 4


http://mindprod.com/jgloss/sizeof.html
treeroot 2005-11-26
  • 打赏
  • 举报
回复
机器都会出故障,更何况人呢,况且有些失误也是难免的
yqj2065 2005-11-26
  • 打赏
  • 举报
回复
呵呵,比BOB大叔差远了,是肯定的。
不过,我胆小,怕老虎
gemouzhi 2005-11-26
  • 打赏
  • 举报
回复
我说的不仅仅指其字眼上的错误,是TIJ在程序上,和概念上的错误。

不是瞧不起Bruce Eckel,他比起BOB大叔来差远了。
yqj2065 2005-11-26
  • 打赏
  • 举报
回复
To treeroot(旗鲁特)@ gemouzhi(gemouzhi)
句柄这个概念,呵呵,是的,令人想起c/c++。

我之所以使用它:
1、TIJ 1e 使用了它。而2e使用了reference。我说这是TIJ中少数几个败笔之一,正因为Bruce Eckel把reference与reference variable有意/无意地混淆起来,(不仅仅指其字眼上的错误)。
2、希望强调:句柄、引用与对象是三个相关的术语,三个不同的东西。
3、这个句柄,我说,“Handle直观地看就是手柄、把手,我们采用计算机界常用的中文翻译句柄。没有必要了解句柄以前的含义,这不重要。也不介意把所有的句柄替换成把手,这不重要。重要的是,Handle是一个学习本章时非常需要的术语。”呵呵

很多人都说“句柄”不好,现在我常常用引用变量或多态变量。
BTW:String str =new String("");
str 是引用变量,
引用是表达式new String("")的值、是一个字面值/文字
对象是??对象1#。呵呵,不好说,常常说new String("")创建的“该”对象。
nuboy 2005-11-26
  • 打赏
  • 举报
回复
个人认为 32位的机器用四个十六进制数表示一个内存地址所以 int 是4位
leekooqi 2005-11-26
  • 打赏
  • 举报
回复
没有试过。。
treeroot 2005-11-26
  • 打赏
  • 举报
回复
句柄这个概念从来都没有在java中出现过.
基本上是c/c++中的概念,而且java也并不需要句柄的概念
因为java不直接操作内存,哪里来的句柄?
gemouzhi 2005-11-26
  • 打赏
  • 举报
回复
for common 32-bit JVMs a plain java.lang.Object takes up 8 bytes,and,the object_ref_size is 4 bytes.

恩,是的,而且不同的object有不同的分配标准。这个有详细的Specification的。是些

类似公式的东西。
gemouzhi 2005-11-26
  • 打赏
  • 举报
回复
这个东西我一般看的文档叫object reference/reference

这个肯定是4个字节。JVM Specification应该有啊,我记得我看的时候,那里还对

各个object的大小做的总结。

object reference这个我回来上SUN上给你看看,不过你可以放心使用,这个是绝对正确的。

当然是在JVM32的前提下。

BTW:TIJ不止这些字眼上的错误。
yqj2065 2005-11-26
  • 打赏
  • 举报
回复
我查了一下,我的笔记中是这样记录的:
for common 32-bit JVMs a plain java.lang.Object takes up 8 bytes,and,the object_ref_size is 4 bytes.
呵呵,不记得出处了,晕
yqj2065 2005-11-26
  • 打赏
  • 举报
回复
To gemouzhi:
"引用变量就是4个字节。这个有官方的文档。"

那里啊?有没有那本书页码?我粗略查了JLS、JVM Specification都没有看见有关说明。
不记得在那里看见过。
gtlang78() 说的对,32位的jvm,好像是4个字节。

引用变量、句柄、对象变量,多态变量、也有人直接用"引用"称呼它,我一般最喜欢用的是句柄,Gosling的《Java编程语言》中把它称为“reference variable”(引用变量),而Bruce Eckel在Thinking in Java 2e中由handle改为 references,个人认为,这是TIJ中少数几个败笔之一。
呵呵,句柄、引用与对象,三个相关的术语,三个不同的东西。
treeroot 2005-11-26
  • 打赏
  • 举报
回复
当然是4个字节,因为目前的主流是32位机
而JVM也是32位了,一般就是地址数据位.
gemouzhi 2005-11-25
  • 打赏
  • 举报
回复
引用变量的内存是几个字节?请教yqj2065(严千钧)大哥一下是什么意思?

因为不同的对象的引用变量分配的内存是不一样的。如String或HashTable都和Object不一样的
加载更多回复(11)

62,612

社区成员

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

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