gpt4 book ai didi

java - Java中的内存布局

转载 作者:行者123 更新时间:2023-12-01 13:51:01 25 4
gpt4 key购买 nike

我在高中时参加了 Java 测试。有一个问题太困扰我了,我一片空白,不知道该如何解决。

考虑以下 Java 代码:

interface Pingable {
public void ping();
}

class Counter implements Pingable {
int count=0;
public void ping(){++count;}
public int val(){return count;}
}

public class Ping {
public static void main(string args[])
{
Counter c=new Counter();
c.ping();c.ping();
int v=c.val();
System.out.println(v);
}
}

假设要在具有 4 字节地址的机器上将其编译为 native 代码。绘制计数器对象在内存中的布局图。显示所有虚函数表。

最佳答案

一些重要的细节,全部完全依赖于JVM。这是针对 OpenJDK/HotSpot 的。

  • 64 位 JVM 通常使用 4 字节地址。 Java 8 64 位可以寻址最多 64 GB 的堆。
  • 每个对象都有一个 header ,该 header 在 32 位 JVM 上为 12 字节,在 64 位 JVM 上为 16 字节。
  • header 包含对类的引用,该类包含对 vtable 的引用。
  • 当代码预热时,可以内联简单的方法,这样就不会使用 vtable。
  • 虽然 JVM 可以进行逃逸分析并消除堆上的对象,但它很少这样做,即使是在微不足道的情况下:(

关于java - Java中的内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com