Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jdk(G1GC)中的堆分配源代码_Java_Garbage Collection_New Operator_Heap Memory - Fatal编程技术网

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

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(线程本地分配缓冲区)默认情况下,在分配内存时。如果没有它,分配会慢得多。虽然我没有深入讨论过

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

任何已知的实现都将使用
TLAB
(线程本地分配缓冲区)默认情况下,在分配内存时。如果没有它,分配会慢得多。虽然我没有深入讨论过关于这个主题的代码,但您可以从开始

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

关于
G1
以下是它的主要功能。又出现在评论中,用一句话:

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


mem\u allocate
的作用可以从开始。

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