当前位置: 代码迷 >> J2SE >> int i=一;intj=1;开辟了多大的内存
  详细解决方案

int i=一;intj=1;开辟了多大的内存

热度:133   发布时间:2016-04-24 17:45:30.0
int i=1;intj=1;开辟了多大的内存
rt
我觉得总共就在栈中开辟了4个字节的空间,因为栈中数据共享
right?

------解决方案--------------------
没有深究不敢乱言
不过你得问法不确切

i和j作为变量本身也是要占用空间的

------解决方案--------------------
你又说出了我的第二个疑问,就是到底i,j占不占内存?
你的意思是内存中肯定是不止4个字节,还要给i,j再分配空间。我问过一些人,他们的答案都是i,j不占内存,根本就没有i,j的地方,只有4个字节放1。不理解,高手解释一下
------解决方案--------------------
blog 更新:
think in java 各章后练习答案.....
http://blog.csdn.net/heimaoxiaozi/

------解决方案--------------------
我是新手 我的理解是

应该是1在堆中开辟了4个字节的空间 而i和j是在栈中创建的引用 指向这个空间
举个例子
就和文件名和文件本身的内容的道理一样 你建个文件 文件名再长 文件里没内容 他的大小也是0
他只不过是一个指向堆空间中的引用.
------解决方案--------------------
2
------解决方案--------------------
int i = 1; int j = 1; 本身“1”会在常量池中占4个字节(int型32bit)。

i和j
如果是类的成员变量,那么在类被创建的时候存放在本类的runtime constant pool中的field array中,至于空间,我没有研究过,因为在分配空间的时候还要对访问控制进行限制(本例是default)和其他许多相关的设定,与具体的jvm实现有关。

如果是局部变量,则又是另一种内存分配方法。

另外,还要考虑是否是多线程的环境,如果是,那么在每个线程中还会有它们的副本。

上面的说法可能是有问题的:),楼下的接着说吧。
------解决方案--------------------
学习一下

-----------------------
http://blog.xerik.cn (专注于Java技术)