I want to understand how java allocates objects in heap. I want to know which parts of the JDK code are triggered when the “new” keyword is used.
How can I define a function that a user can call from the java code and that would implement functionality in JDK source code?
I am aware of the fact that jdk14 uses G1GC as a default garbage collector and G1GC code is present in jdk14/src/hotspot/share/GC/G1 folder but I am unable to follow G1Allocator allocates memory to the user threads(if it does).
Any known implementation will use
TLAB (thread local allocation buffer) by default when allocating memory. Without it – the allocation would be much more slower. Though I have not dived into the code too much about this subject, you can start from here, for example.
There is a very good comment in the source code about what happens when a
new is requested here. Basically if
TLAB can be used (an Object is not bigger than that for example), it will be; otherwise raw
malloc for every
new will be done.
G1 here are the mains points of what it does. A general explanation is again in the comments, with a phrase :
All non-TLAB allocation requests should go to mem_allocate()
mem_allocate does can be started from here.