【问题标题】:Heap allocation source code in in jdk(G1GC) [closed]jdk(G1GC)中的堆分配源代码[关闭]
【发布时间】:2020-11-15 02:05:30
【问题描述】:

我想了解java如何在堆中分配对象。我想知道使用“new”关键字时会触发JDK代码的哪些部分。 如何定义用户可以从 java 代码调用并在 JDK 源代码中实现功能的函数? 我知道 jdk14 使用 G1GC 作为默认垃圾收集器并且 G1GC 代码存在于 jdk14/src/hotspot/share/GC/G1 文件夹中,但我无法遵循 G1Allocator 为用户线程分配内存(如果确实如此)。

【问题讨论】:

  • 堆上的实际内存分配发生在JVM中,而不是在JDK代码中。
  • 感谢您的回复。但是有没有像 malloc 这样的内部分配器。您还可以参考处理内部指针的代码。 Ps:我是刚开始接触源码,对内部是如何管理的东西有一点了解。
  • 归结为“我需要链接”的问题被视为离题。

标签: java garbage-collection new-operator heap-memory


【解决方案1】:

任何已知的实现在分配内存时都会默认使用TLAB(线程本地分配缓冲区)。没有它 - 分配会慢得多。虽然我没有深入研究这个主题的代码,但你可以从here, for example开始。

源代码中有一个很好的注释,说明当请求new 时会发生什么here。基本上,如果可以使用TLAB(例如,一个对象不大于那个),它将是;否则每个new 的原始malloc 将被完成。

关于G1,这是它的主要功能。 A general explanation 再次出现在 cmets 中,带有一句话:

所有非 TLAB 分配请求都应该转到 mem_allocate()

mem_allocate 所做的事情可以从here 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多