Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有状态字段的java对象如何存储在JVM中?_Java_Memory Management_Jvm_Heap Memory_Stack Memory - Fatal编程技术网

没有状态字段的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将起作用——在某个时候,它可能会证明某个实例可能不需要,并且可能会省略该分配。或者,如果实例是纯本地的,并且没有逃过称为标量替换的优化,则可能会发生这样的情况:实例可以分解为字段,而不是在堆中分配。

这是否回答了您的问题?