【问题标题】:Known attempts at stack-based memory management for the JVMJVM 的基于堆栈的内存管理的已知尝试
【发布时间】: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


【解决方案1】:

这不是很实用。

一旦有了多线程,就需要在线程之间共享对对象的引用。这意味着线程需要保存对其他线程堆栈的引用,一旦最初创建对象的方法返回,这些堆栈就会失效。

堆实际上是一个进程中所有线程都可以看到的内存共享区域,因此任何需要被多个线程看到的对象都自然存在。

另一种说法是堆栈是线程私有的,而堆是它们之间共享的。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2015-09-28
    • 2011-01-06
    • 2011-11-28
    • 2012-03-07
    • 1970-01-01
    • 2020-10-10
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多