我正在寻找的是一旦函数被递归调用,放入调用堆栈的内容,如何将参数放在彼此之上(按顺序推送局部变量?是否以相反的顺序推送参数? ),除了那些你要求的数据之外,数组中还有哪些字节......
在互联网上搜索,我只发现了简单的编码教程或有关java内存模型的信息,这似乎是关于防止并发,并没有真正解释我需要的内存管理。答案 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)
你也应该问问自己:
答案 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的内存模型应该有多少工作,但确实会使某些区域(如垃圾收集)对解释开放,因此它也可能有助于尝试查找文档/规范除太阳之外的虚拟机的内存模型。