繁体   English   中英

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

[英]where can i learn about how memory management in java works?

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

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

也许阅读Java虚拟机规范将对您有所帮助。

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

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

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

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

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

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

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

你也应该问自己:

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

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

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

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

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

如果奥斯卡雷耶斯不是第一个的话,我的反应就会和奥斯卡雷耶斯的回答完全相同。 您肯定会在VM规范中找到类似的东西。

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

使用javap并阅读ByteCode,您的直觉将更快更好地帮助您。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM