Dotheseplaytogetheratall?
WhatisTLABallocation?Pointer-bumpallocation?Whoisresponsibleforallocatingobjectsanyway?
Mostofthetimewedo ,theruntimeenvironmenthastoallocatestoragefortheinstanceinquestion.
ThetextbookGC(memorymanager)interfaceforallocationisverysimple:
Ofcourse,sincememorymanagersareusuallywritteninthelanguagedifferentfromthelanguageruntimeistargeted
by(e.g.JavatargetsJVM,yetHotSpotJVMiswritteninC++),theinterfacegetsmurkier.Forexample,suchacallfrom
JavaprogramneedstotransitintonativeVMcode.Doesitcostmuch?Probably.Doesthememorymanagerhastocope
withmultiplethreadsbeggingformemory?Forsure.
Sotooptimizethis,wemayinsteadallowthreadstoallocatetheentire ofmemoryfortheirneeds,andonlytransit
toVMtogetanewblock.InHotspot,theseblocksarecalledThreadLocalAllocationBuffers(TLABs),andthereisa
sophisticatedmachinerybuilttosupportthem.NoticethatTLABsarethread-localinthetemporalsense,meaningthey
actlikethebufferstoacceptcurrentallocations.TheystillarepartsofJavaheap,thethreadcanstillwritethereference
toanewlyallocatedobjectintothefieldoutsideofTLAB,etc.
AllknownOpenJDKGCssupportTLABallocation.ThispartofVMcodeisprettywellsharedamongthem.AllHotspot
compilerssupportTLABallocation,soyouwouldusuallyseethegeneratedcodeforobjectallocationlikethis:
Theallocationpathisinlinedinthegeneratedcode,andassuchdoesnotrequirecallingintoGCtoallocatetheobject.If
wearerequestingtoallocatetheobjectthatdepletestheTLAB,ortheobjectsislargeenoughtoneverfitintotheTLAB,
thenwetakea"slowpath",andeithersatisfytheallocationthere,orcomebackwithafreshTLAB.Noticehowthemost
frequent"normal"pathis addingtheobjectsizetoTLABcurrentcursor,andthenmovingon.
Thisiswhythisallocationmechanismissometimescalled .Pointerbumprequiresacontiguous
chunkofmemorytoallocateto,though — whichbringsbacktheneedforheapcompaction.NoticehowCMSdoesfree-
listallocationin"old"generation,thusenablingconcurrentsweep,butithascompactingstop-the-world"young"
collections,thatbenefitfrompointerbumpallocation!Amuchlowerquantityofobjectsthatsurvivedtheyoung
collectionwouldpaythecostoffreelistallocation.
Forthesakeofexperiment,wecanturnTLABmachineryoffwith .Then,allallocationswouldtakeinto
thenativemethod,likethis: