java 没有状态字段的对象如何存储在 JVM 中?

How does java object with no of state fields get stored in JVM?

示例类

************ 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");
    }
}

我的理解:Example.Main 方法中,测试引用将存储在 Java 堆栈内存中并且由于 new Test() 对象没有状态所以不会有任何堆内存分配。

疑问: 通常我们说Objects是存储在Heap内存中的,但是这里我们没有任何Test Object的状态字段,那么Heap中会不会有内存分配内存?

在堆中创建一个实例,即使没有字段;此外,将为该实例创建 2 headers:markclass。毕竟,您正在 实例 上调用 hello,并且 java 语言规范明确指出 Object 实例是在堆中创建的。

当代码运行足够多的时候,JIT 将启动 - 在某些时候,它可能证明可能不需要某个实例并且 可能 删除该分配。或者,如果实例是纯本地的并且没有逃脱称为 标量替换 的优化,则实例可能会分解到字段中,而不是在堆中分配。