我在哪里可以了解java中的内存管理是如何工作的?

时间:2009-01-08 21:19:59

标签: java memory-management

我正在寻找的是一旦函数被递归调用,放入调用堆栈的内容,如何将参数放在彼此之上(按顺序推送局部变量?是否以相反的顺序推送参数? ),除了那些你要求的数据之外,数组中还有哪些字节......

在互联网上搜索,我只发现了简单的编码教程或有关java内存模型的信息,这似乎是关于防止并发,并没有真正解释我需要的内存管理。

7 个答案:

答案 0 :(得分:4)

也许Java Virtual Machine Specification上的阅读会对您有所帮助。

它解释了Java如何在Suns VM上运行和/或在其他实现它时它们应该如何工作(IBM,BEA等)

答案 1 :(得分:2)

我认为绝对值得一看Java语言规范,看看它是否能回答你的一些问题。我还写了一些关于你可能感兴趣的memory usage of Java objects的页面,主要基于Hotspot。其他来源包括Sun发布的白皮书或您最喜欢的JVM供应商制作的其他技术文档(如果您稍微挖掘一下,IBM在发布技术细节方面也非常合理)。

如果您感觉特别“硬核”,那么您也可以下载debug JDK,它允许您转储JIT编译器生成的所有代码(打开-XX:+ PrintOptoAssembly)

你也应该问问自己:

  • 你真的关心,比如说什么命令方法参数写入堆栈?只要答案是“被调用方法期望它们的顺序”,它会有什么不同? (N.B.如果JIT编译器内联方法,在某些情况下答案可能是“它不会将参数写入堆栈”......)
  • 你能凭经验找到问题的答案吗? (例如,如果你真正想知道的是“我可以使用一个接受这些参数的方法,并且每次都声明这些局部变量”,那么为什么不只是编写一个测试程序来从Java中找到它? / LI>

答案 2 :(得分:2)

此链接将帮助您更好地理解它。

它是一个pdf,我想从一个系列讲座。 在我自己试图详细了解内存管理时在谷歌上找到它。

我还没有完成整个pdf,但我认为它应该告诉你很多。

http://www.cs.umd.edu/class/spring2006/cmsc433/lectures/gc.pdf

答案 3 :(得分:1)

本白皮书提供了我见过的最佳介绍:

http://www.oracle.com/technetwork/java/memorymanagement-whitepaper-150215.pdf

了解该文档后,您可以找到更详细的资源,例如Sun提供的GC调整指南:

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

答案 4 :(得分:0)

如果不是第一个,我会像奥斯卡雷耶斯那样回复。你肯定会在VM规范中找到类似的东西。

但是,为什么要这么准确地知道它,因为你无论如何也无法用Java访问这个存储?

答案 5 :(得分:0)

使用java并阅读ByteCode,你的直觉会更快更好地帮助你。

答案 6 :(得分:0)

在阅读JVM规范时请记住,虽然它定义了Java的内存模型应该有多少工作,但确实会使某些区域(如垃圾收集)对解释开放,因此它也可能有助于尝试查找文档/规范除太阳之外的虚拟机的内存模型。