我想知道堆在其节点中存储的spcecifically是什么?我理解堆是一种二叉树,根据我研究的树,节点包含对存储值的引用。我的问题是在java堆的情况下,节点结构是否包含对存储对象的位置(存储在RAM中的其他位置)的Java对象引用(引用类型的情况),或指向内存位置的指针数据类型,或其他一些表示?
阅读关于这个主题我觉得很奇怪,一个对象被定义为一个局部变量,因此存在于堆栈中,以及堆中(直到我意识到这将是坏的,因为局部变量是假设的只能通过相关的线程堆栈来查看相关的线程) - 但是我仍然认为使用这样的一对对象引用很奇怪,并且想知道我是否误解了它的实现?
答案 0 :(得分:2)
Java堆只需要确认VM specification的2.5.3部分。没有单一的实现,所以严格来说你的问题没有意义。
这里的空间太少,无法完全阐明Oracle服务器和客户端虚拟机。您应该为目标虚拟机阅读它,并在遇到问题时询问更具体的问题。
您应该将Java堆栈和堆与C中的相关概念(堆栈分配与malloc)进行比较,区别在于您不需要因GC而释放它们,并且不允许执行指针算术,因为对象可以获得随时感动。
另一方面,Java内存模型规定了VM在并发访问各种类型的变量时必须做出的保证。与C ++的std::atomic
比较。这与内存布局无关。