没有状态字段的java对象如何存储在JVM中?
示例类没有状态字段的java对象如何存储在JVM中?,java,memory-management,jvm,heap-memory,stack-memory,Java,Memory Management,Jvm,Heap Memory,Stack Memory,示例类 ************ Example.java ************ public class Example { public static void main(String[] args) { Test test = new Test(); test.hello(); } } ************** Test.java ************ public class Tets { pub
************ Example.java ************
public class Example {
public static void main(String[] args) {
Test test = new Test();
test.hello();
}
}
************** Test.java ************
public class Tets {
public void hello() {
System.out.println("Hi");
}
}
我的理解:在示例.Main
方法中,测试引用将存储在Java堆栈内存中,因为new test()
对象没有状态,所以不会有任何堆内存分配
疑问:通常我们说对象存储在堆内存中,但这里我们没有任何测试对象的状态字段,那么堆内存中是否有任何内存分配?即使没有字段,也会在堆中创建一个实例;此外,将为此实例创建两个标题:mark
和class
。毕竟,您正在对一个实例调用hello
,java语言规范明确指出对象实例是在堆中创建的
当代码运行足够多的时间时,JIT将起作用——在某个时候,它可能会证明某个实例可能不需要,并且可能会省略该分配。或者,如果实例是纯本地的,并且没有逃过称为标量替换的优化,则可能会发生这样的情况:实例可以分解为字段,而不是在堆中分配。这是否回答了您的问题?