Java jdk(G1GC)中的堆分配源代码
我想了解java如何在堆中分配对象。我想知道当使用“new”关键字时会触发JDK代码的哪些部分。 我如何定义一个用户可以从java代码中调用并在JDK源代码中实现功能的函数?Java jdk(G1GC)中的堆分配源代码,java,garbage-collection,new-operator,heap-memory,Java,Garbage Collection,New Operator,Heap Memory,我想了解java如何在堆中分配对象。我想知道当使用“new”关键字时会触发JDK代码的哪些部分。 我如何定义一个用户可以从java代码中调用并在JDK源代码中实现功能的函数? 我知道jdk14使用G1GC作为默认垃圾收集器,G1GC代码存在于jdk14/src/hotspot/share/GC/G1文件夹中,但我无法理解G1Allocator将内存分配给用户线程(如果有)。任何已知的实现都将使用TLAB(线程本地分配缓冲区)默认情况下,在分配内存时。如果没有它,分配会慢得多。虽然我没有深入讨论过
我知道jdk14使用G1GC作为默认垃圾收集器,G1GC代码存在于jdk14/src/hotspot/share/GC/G1文件夹中,但我无法理解G1Allocator将内存分配给用户线程(如果有)。任何已知的实现都将使用
TLAB
(线程本地分配缓冲区)默认情况下,在分配内存时。如果没有它,分配会慢得多。虽然我没有深入讨论过关于这个主题的代码,但您可以从开始
源代码中有一条很好的注释,说明了当请求新的
时会发生什么。基本上,如果可以使用TLAB
(例如,一个对象不大于该对象),它将被使用;否则,将对每个新的执行原始malloc
关于G1
以下是它的主要功能。又出现在评论中,用一句话:
所有非TLAB分配请求应转到mem_allocate()
mem\u allocate
的作用可以从开始。堆上内存的实际分配发生在JVM中,而不是JDK代码中。感谢您的回复。但是是否有像malloc这样的内部分配器。您还可以参考处理内部指针的代码。Ps:我刚刚开始学习源代码,对如何在内部管理这些东西有一点了解。可以归结为“我需要链接”的问题被认为是离题的。谢谢你的回答:)