Java对象运行时在内存中的情况

 

Java对象运行时在内存中的情况

 

您可能已经知道,一旦创建了一个对象,它就只是堆中的一系列字节。您可能对Java对象在内存中的情况感到好奇吗?

 

1.变量

以下是“Base”(B)类的对象布局示例。这个类没有任何方法。我们将在后面的文章中看到如何在内存中布置方法。

如果我们有另一个类“Derived”(D)扩展这个“Base”类。内存布局如下所示:

子对象具有与父对象相同的内存布局,除了它需要更多空间来放置新添加的字段。这种布局的好处是,指向D对象的B型指针仍然在开头看到B对象。因此,通过B引用对D对象进行的操作保证是安全的,并且不需要动态地检查B指向的是什么。

 

2.方法

遵循相同的逻辑,该方法可以放在对象的开头。

但是,这种方法效率不高。如果一个类有很多方法(例如M),那么每个对象必须设置O(M)指针。此外,每个对象都需要有O(M)指针的空间。那些使得创建对象更慢并且对象更大。

优化方法是创建一个虚函数表(或vtable),它是指向特定类的成员函数实现的指针数组。为每个类创建一个vtable的单个实例,并使每个对象存储一个指向vtable的指针。

这是优化的方法。

*以上是我对斯坦福编译器讲座的笔记,这些讲座具有非常好的动画效果。

 

参考文献:
1。斯坦福编译器讲座
2. JVM

 

相关文章:

  1. 关于C / C ++指针的前5个问题
  2. 用Java定义用户定义对象的LinkedList
  3. Java数组在内存中的外观如何?
  4. Java内存泄漏的介绍

转载来源:https://www.programcreek.com/2011/11/what-do-java-objects-look-like-in-memory/

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/87870589