首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jdk中的堆分配源代码(G1GC)

jdk中的堆分配源代码(G1GC)
EN

Stack Overflow用户
提问于 2020-07-25 09:18:38
回答 1查看 260关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 18:53:04

默认情况下,在分配内存时,任何已知的实现都将使用TLAB (线程本地分配缓冲区)。没有它,分配就会慢得多。虽然我没有对这个主题进行过多的代码研究,但您可以从例如,在这里开始。

源代码中有一个非常好的注释,说明当请求new这里会发生什么。基本上,如果可以使用TLAB (例如,一个对象不大于该对象),它就会使用;否则,将对每个new执行原始malloc操作。

关于G1,这里是它所做工作的要点。一般解释再次出现在评论中,其中有一个短语:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63086573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档