代码之家  ›  专栏  ›  技术社区  ›  DCR

Java解释了对象是如何存储在内存中的

  •  1
  • DCR  · 技术社区  · 4 年前
    int x = 5                               Cat luna = new Cat()
    Address           Value                 address       reference
    669cf9            5                     723ecf        683ec5
    

    如果是猫:

    public class Cat{
      private String name;
    
      public void talk(){
          System.out.println("meow");
      }
    }
    

    如何显示内存地址683ec5中的内容?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Eugene    4 年前

    对象作为带有对象头的字段块存储在内存中。你可以看看 jol 查看对象在内存中的实际布局。每个对象都有标题,字段可能有填充,字段可能会占用比您想象的更多的空间( boolean )等等。

    你可以看看 this 我试图解释更多的例子,但是github页面关于jol的例子非常广泛。

    bytecode 老实说,级别访问对象字段很无聊,但您可以确定是什么 javac 生产 javap ).当在CPU上执行代码时,在尝试获取某个字段时,您将看到不同的偏移量,例如:

    mov    0x10(%rsi),%r10
    

    这是在某个特定时间访问“某物” 16 抵消( 0x10 这里是偏移量)。想想像堆栈这样的对象,访问字段——你需要知道每个字段有多大(VM跟踪它)以及堆栈的起始地址,其余的都很简单。

    如果你真的想知道事情是从哪里开始的,你必须阅读这里 this page .