【发布时间】:2015-01-12 10:39:50
【问题描述】:
我正在阅读不同的 JVM 实现,我想知道为什么 stack-based memory management 没有更普遍(不要与 escape analysis 混淆)。你们中是否有人熟悉使用基于堆栈的内存管理编写 JVM 的尝试?
【问题讨论】:
-
那么您能否同时发布一个指向资源的链接,该资源描述了对象转义与转义分析的不同之处?因为当我在 google 中输入“object escaping”时,我得到的第一个打击是关于逃逸分析的 wiki。
-
忽略对象转义术语 - 我只是在谈论运行时基于堆栈的内存分配。据我所知,这与逃逸分析不同,因为分析发生在编译时。
-
JVM 在堆上逻辑分配对象,没有逃逸证明,这对于大量现实世界的工作负载是不可能的,物理堆是唯一实用的安排。跨度>
-
我不确定我是否遵循。为什么无法为现实世界的工作负载创建逃逸证明?从理论上讲,您可以将所有加载的类放在 vm 堆中,然后在创建新实例时将它们放在堆栈中,对吗?
-
这不切实际。一旦有了多线程,就需要在线程之间共享引用。这意味着线程需要保存对其他线程堆栈的引用,一旦创建对象的方法最初返回,这些引用就会失效。
标签: java garbage-collection jvm stack