如果我们只是创建一个引用变量或为原始数据类型或引用数据类型声明一个变量而不使用任何值进行初始化(如下所示),那么内存中会发生什么?
int x;
Employee emp;
那么在这两种情况下,内存中究竟发生了什么?
在此阶段是否分配了任何内存,或者它是否指向任何随机位置或指向 null 或指向垃圾值?
与第二种情况一样,如果我们使用带 new 运算符的构造函数或使用任何其他方式创建对象,则只会在内存中创建空间。
Employee emp = new Employee();
Java 虚拟机 (JVM) 从操作系统分配堆内存,然后为 Java 应用程序管理自己的堆。当应用程序创建一个新对象时(例如Employee emp = new Employee()
),JVM分配一块连续的堆内存区域来存储它。
当对象未初始化时(例如Employee emp = null
),不需要分配任何内存。然而,原始类型(在全局范围内)会使用默认值进行初始化,即使您没有显式设置它(例如int x
事实上是int x = 0
)。所以在这种情况下,内存也会被分配。
只要对对象的引用保留在应用程序中的任何位置,该对象就会保留在内存中。不再引用的对象将由垃圾收集器 (GC) 处理,并从堆中清除以回收其空间。
The String
类还分配堆内存,但使用了一些调整:字符串实习 http://en.wikipedia.org/wiki/String_interning一旦您分配了多个实例,就会使用String
与相同的文字。因此,实际上内存中只有一个实例,但有多个引用它的变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)