Top Banner
Design Rationales in the JRockit JVM Marcus Lagergren Senior Software Architect, Klarna
113

Design rationales in the JRockit JVM

Apr 16, 2017

Download

Software

JavaDayUA
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Design rationales in the JRockit JVM

DesignRationalesintheJRockit JVMMarcusLagergren

SeniorSoftwareArchitect,Klarna

Page 2: Design rationales in the JRockit JVM

DesignRationalesintheJRockit JVMMarcusLagergren

SeniorSoftwareArchitect,Klarna

Page 3: Design rationales in the JRockit JVM

DesignRationalesintheJRockit JVMMarcusLagergren

SeniorSoftwareArchitect,Klarna

Page 4: Design rationales in the JRockit JVM

Agenda• Inthebeginning…• Whatdidweaccomplish/Internals

– CodeGeneration– MemoryManagement– Threads&Synchronization

• Externals– TheJavaMissionControlsuite– AparenthesisonJRockitVE

• Q&A

Page 5: Design rationales in the JRockit JVM

Aboutthespeaker

@lagergren

Page 6: Design rationales in the JRockit JVM

Aboutthespeaker

@lagergren

Page 7: Design rationales in the JRockit JVM

Aboutthespeaker

@lagergren

Page 8: Design rationales in the JRockit JVM
Page 9: Design rationales in the JRockit JVM

Aboutthespeaker• M.Sc.fromKTH,Stockholm– NarrowlyescapeddoingaPhDonbitsecurityincryptographicsystems

• Runtime,OSandcompilerengineersince1999,withsomestartupbreaks

• OneoftheoriginalcreatorsoftheJRockitJVM

Page 10: Design rationales in the JRockit JVM

Inthebeginning

Page 11: Design rationales in the JRockit JVM

AppealVirtualMachines• AppealSoftwareSolutions– Consulting,almostexclusivelyJavaby1997

• Stillthepre-appserverera

Page 12: Design rationales in the JRockit JVM

AppealVirtualMachines• WesawthatJavawouldbegreatontheserverside

Page 13: Design rationales in the JRockit JVM

AppealVirtualMachines• WesawthatJavawouldbegreatontheserverside– Shorterdevelopmentcycles– moneyinthebank

• Bufferoverrunprotection• Automaticmemorymanagement• Writeonceruneverywhere

Page 14: Design rationales in the JRockit JVM

AppealVirtualMachines• Tremendousscalability problems• SunClassicVMwasall-encompassing

Page 15: Design rationales in the JRockit JVM

JavaOne1997• SunMicrosystemspresentstheHotSpotvirtualmachine

Page 16: Design rationales in the JRockit JVM

JavaOne1997• SunMicrosystemspresentstheHotSpotvirtualmachine– “WOW!Thisisthewaytodoit!Adaptiveruntimes!”

Page 17: Design rationales in the JRockit JVM

JavaOne1998• SunMicrosystemspresentstheHotSpotvirtualmachineagain

Page 18: Design rationales in the JRockit JVM

JavaOne1998• SunMicrosystemspresentstheHotSpotvirtualmachineagain– “WTF!Thisisslide-by-slidetheexactsamepresentationaslastyear!?!”

–Wecan’twaitanylonger.Let’sbuildourownVM.Howhardcanitbe?

Page 19: Design rationales in the JRockit JVM

CreatingourownJVM- JRockit

Page 20: Design rationales in the JRockit JVM

Productizeanarrowerdomain?• Server-sideusageonly.Headless.– Weneedtohelptheearlyappservervendorsgetperformanceandscalability

Page 21: Design rationales in the JRockit JVM

Productizeanarrowerdomain?• Server-sideusageonly.Headless.– Weneedtohelptheearlyappservervendorsgetperformanceandscalability

• Nointerpreter– “startuptimedoesn’tmatterontheserveranyway”

Page 22: Design rationales in the JRockit JVM

Productizeanarrowerdomain?• Server-sideusageonly.Headless.– Weneedtohelptheearlyappservervendorsgetperformanceandscalability

• Nointerpreter– “startuptimedoesn’tmatterontheserveranyway”

• Greenthreadsorn xm threads.– Explicitparallelismwasall-pervasive.

Page 23: Design rationales in the JRockit JVM

Productizeanarrowerdomain?• IncrementalGC–Wethoughtsomethinglike[Seligman,Grarup]wouldsuffice.

Page 24: Design rationales in the JRockit JVM

Productizeanarrowerdomain?• IncrementalGC–Wethoughtsomethinglike[Seligman,Grarup]wouldsuffice.

• Supportourselvesonconsultingonly.– Nope– neededventurecapital

Page 25: Design rationales in the JRockit JVM

TheJavaLicense• Youcan’tcallyourself“Java”withoutaJavalicense

• YouneedtopasstheTCKtestsuite– Notavailablewithoutlicense

• TogetaJavaLicenseyouneeda“valueadd”

Page 26: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?

Page 27: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?

Page 28: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?

Page 29: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?– Superiorperformance!

Page 30: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?– Superiorperformance!–What?Youdidn’tlikethat?

Page 31: Design rationales in the JRockit JVM

TheJavaLicense• What’sa“valueadd”?– Superiorperformance!–What?Youdidn’tlikethat?– OK…Let’ssee…Err..“managability”

Page 32: Design rationales in the JRockit JVM

TheJavaLicense• JavaLicensewasgranted2001– HelpeduspartnerupwithBEASystemsandIntel

– BEAacquiredusin2002– OracleacquiredBEAin2008– OracleacquiredSunin2010

Page 33: Design rationales in the JRockit JVM

Whatdidweaccomplish?

Page 34: Design rationales in the JRockit JVM

Therealvalueaddsturnedouttobe:

• Multitieredsupportforpayingcustomers– PartoftheWLSstack

Page 35: Design rationales in the JRockit JVM

• MonitoringandServiceability– JRockit MissionControl(nowJavaMissionControl)

– Recordandintrospectproductionsystemswithzerooverhead.

Therealvalueaddsturnedouttobe:

Page 36: Design rationales in the JRockit JVM

• Pioneered“Softrealtime”GC– DeterministicGC– LowlatencyGC

Therealvalueaddsturnedouttobe:

Page 37: Design rationales in the JRockit JVM

• Virtualization– JRockitVirtualEdition– anoperatingsystemforJava

– ShorterpathsbetweenJavaandhardware– Hypervisorrequired– JRockitVEonvirtualhardwareoutperformedphysicalLinux!

Therealvalueaddsturnedouttobe:

Page 38: Design rationales in the JRockit JVM

• Thebenchmarkwars– ConstantlykeepingitgoingwithSunandIBM,drivingJavaserver-sideperformance

Therealvalueaddsturnedouttobe:

Page 39: Design rationales in the JRockit JVM

• JRockit becamethedefaultJVMintheOraclestackin2008

• ExaLogic

…andthen

Page 40: Design rationales in the JRockit JVM

INTERNALS

@SimmsUpNorth

Page 41: Design rationales in the JRockit JVM

CodeGeneration

Page 42: Design rationales in the JRockit JVM

Codegeneration– NoInterpreter• Keeptestmatrixsmall• Keepoperationalcomplexitydown• Targetingserversideapps– warmupasmallissue

• “Codecaching/AOTcanbedonelater”

Page 43: Design rationales in the JRockit JVM

Codegeneration– OneJIT• Keeptestmatrixsmall• Keepoperationcomplexitydown• Runitindifferentmodes,withmaximumcodereuse

• SameIRthroughout–Withgradualaugmentations

Page 44: Design rationales in the JRockit JVM

But…• Startupbecameaproblem–Weremovedoptimizersandaddedasa“spine”tothenormalJITpipeline.

• Lazycodegenerationthroughtrampolines• Samemechanismforcodeinvalidation• Bookkeepingtoidentifyaprogrampointdowntoanyindividualmachineinstruction

Page 45: Design rationales in the JRockit JVM

CodeGeneration• Same“spine”usedinalltiersofcodegeneration

Page 46: Design rationales in the JRockit JVM

CodeGeneration• Same“spine”usedinalltiersofcodegeneration

Page 47: Design rationales in the JRockit JVM

Optimizations• InandoutofSSA• AppliedtoalllevelsofIR

– Looppeeling,valuenumbering, Stringappendexplosion,Typecheckremoval,signextensionelimination,copypropagation, bounds checkremoval,virtualtofixedcalls, inlining,ifshortcircuiting,straightening,strengthreduction,constantpropagation, deadcoderemoval,outofloophoisting,explodeobjectsandarraycopies,boxing&unboxing removal,localescapeanalysis,ASMpeepholeoptimization,redundant memoryaccessremoval,etcetcetc…

• SupportforregionalizedIRs• GraphFusionRegisterAllocator

Page 48: Design rationales in the JRockit JVM

OptimizationTargets• Threadsampling• PartlytakenoverbysafepointbasedapproachinR28

• Somecodeinstrumentation,forexampleforinliningpath– Notinthegeneralcase,e.ginvocationcounters

Page 49: Design rationales in the JRockit JVM

OptimizationTargets• Hardwaresamplingwhereavailable– OnlygoodthingaboutIA64?– Couldalsomatche.g.L2missestoprogrampoints

• Buggingtheprocessormanufacturerssince2002aboutuserlandPCsamplebuffer.

• JRockitVEx1000moresamples– significantlyprovenshorterwarmup

Page 50: Design rationales in the JRockit JVM

HotSpotstyle?• On-stackreplacement?• Deoptimization?

Page 51: Design rationales in the JRockit JVM

HotSpotstyle?• On-stackreplacement?• Deoptimization?• Nevermuchcaredforanyit;-)

Page 52: Design rationales in the JRockit JVM

HotSpot StyleOSRandDeoptimization• We’veneverfoundapractical usecase.

– Sowecan’teverswapoutthemainfunctionwiththemicrobenchmark loop.Whocares?

• Anassumption isinvalidated– Eitherpatchcodedirectlyoruseaguardwhengeneratingitin

thefirstplace• Alargeassumption

– Writeatrapinthecodeandschedulelazyregenerationofentiremethod

• Notstrictly truefordynamic languages

Page 53: Design rationales in the JRockit JVM

HotSpot StyleOSRandDeoptimization• We’veneverfoundapractical usecase.

– Sowecan’teverswapoutthemainfunctionwiththemicrobenchmark loop.Whocares?

• Anassumption isinvalidated– Eitherpatchcodedirectlyoruseaguardwhengeneratingitin

thefirstplace• Alargeassumption

– Writeatrapinthecodeandschedulelazyregenerationofentiremethod

• Notstrictly truefordynamic languages

Page 54: Design rationales in the JRockit JVM

HotSpot StyleOSRandDeoptimization• We’veneverfoundapractical usecase.

– Sowecan’teverswapoutthemainfunctionwiththemicrobenchmark loop.Whocares?

• Anassumption isinvalidated– Eitherpatchcodedirectlyoruseaguardwhengeneratingitin

thefirstplace• Alargeassumption

– Writeatrapinthecodeanddoregenerationofentiremethod• Notstrictly truefordynamic languages

Page 55: Design rationales in the JRockit JVM

HotSpot StyleOSRandDeoptimization• We’veneverfoundapractical usecase.

– Sowecan’teverswapoutthemainfunctionwiththemicrobenchmark loop.Whocares?

• Anassumption isinvalidated– Eitherpatchcodedirectlyoruseaguardwhengeneratingitin

thefirstplace• Alargeassumption

– Writeatrapinthecodeanddoregenerationofentiremethod• Notstrictly truefordynamic languages

Page 56: Design rationales in the JRockit JVM

“Garbagecollectingcode”• Codekeptinbinarytreeofcodeblocks~ 64M– Moreiflargepagesenabled

• Classloaderunloadingà garbagecollection• Referencecounttoactivecodemodifiedwhen

backpatching• Specializedusageofcodeblocks.– Trampolinesonly– Optimizedcodeonly

Page 57: Design rationales in the JRockit JVM

Bytecodeisbad– killitquickly

Page 58: Design rationales in the JRockit JVM

Bytecodeisbad– killitquickly• What’swiththegoto:s?• WhycanitexpressmorethanJavasourcecode?– OKweunderstandthemultilanguageconcept,wesortaforgiveyou.

– Butman,dominatorsandloopanalysis–that’salotofcompiletime

Page 59: Design rationales in the JRockit JVM

Bytecodeisbad– killitquickly• …andwhyisitastackmachineANDaregistermachinewith65535registersatthesametime!?

• Initially triedtoreconstructASTs– Obfuscatorsetcmadethisprettyhopeless.

• ~15%oftheklocsinJRockit/codegendoflowcontrolanalysisonthegoto:s

Page 60: Design rationales in the JRockit JVM

TheIR• UseIReverywhere(orJava)• TheIRshouldideallyreflectanyofseveralpluggable

frontends.– WeplayedaroundwithCLRabit.– Thesedays– dynamiclanguages:-)

• NoSeaofNodes• NoHotSpotstyle“highlevelIRislowlevel”

Page 61: Design rationales in the JRockit JVM

TheIR• SimpleIRinMIRform(platformindependent)

Page 62: Design rationales in the JRockit JVM

TheIR– DesignRationale• Wehadsomecompilerexperience– wantedtobeontrackquickly.Doitthetraditionalway.

• Wearenot“wrong”.LLVMisverysimilar.

Page 63: Design rationales in the JRockit JVM

TheIR– DesignRationale• Tiered: highesttier==alwayshighlevel• Hardwareagnostic.• Noarchitecturespecificmemoryops

• Tiered: lowesttier==alwaysthenativearchitectureinstructionforinstruction.• Agradualtransition.• ACPUhasnoseaofnodes.

Page 64: Design rationales in the JRockit JVM

TheIR• HighestIRlevelmayhaveoperationsasoperands

• Intrinsicseverywhere– arraycopy, membar, cmpuXX, sse4IndexOf,

doubleToLongBits, crypto, Math.sin andsoon…• RegretnotdoingmoreinSSAform

Page 65: Design rationales in the JRockit JVM

TheIRInfo“database”• Lazilycomputableinformation

– Liveness– Dominators– Loopinformation– Aliases– Typeinference– Ranges– Nullnessanalysis– …– Invalidateonmodification.

• Notaverystablemodel.

Page 66: Design rationales in the JRockit JVM

Memorymanagement

Page 67: Design rationales in the JRockit JVM

Transition:objectlayout,typesandlivemaps…

Page 68: Design rationales in the JRockit JVM

Objectlayoutandtypes• Objectheadersshouldbefixedsized.• JRockit Objectheaderis32+32bits• Allplatformswithsomecontentvariations.

• [Grove]ramblingsonobjectmodels• Typetreesimilarto [Krall,Vitek,

Horspool]

Page 69: Design rationales in the JRockit JVM

Livemaps(oopmaps)• Registersandstackslotsonthelocalframethatcontainobjects.

• Nothingstrangehere.Requiredfornon-conservativegarbagecollectionofanysort.

• Internalpointerbit• Formstherootset.• Rollforwardingvsthesafepointapproach

Page 70: Design rationales in the JRockit JVM

Transition- Livemaps

Page 71: Design rationales in the JRockit JVM

Memorymanagement• Garbagecollectors– Concurrent– Parallel– Deterministic

• Withorwithoutgenerations

Page 72: Design rationales in the JRockit JVM

Memorymanagement• Concurrent collection

– Yourbasicgenerational concurrentmarkandsweepcollector [Printezis,Detlefs]

– Supportsmultigeneration (>1)youngspaces.• Combatsheavyobjectallocationsituations.• Adaptivelybalancedagainstcopyoverhead

– Writebarriersbeforeobjectwrites– Minimizestoppingtheworld– Youngcollections useavariantofstop&copy

Page 73: Design rationales in the JRockit JVM

Memorymanagement• Canalsorunwithaparallel policy– Stoptheworldandcleanupquickly– Onlythroughputoriented– Nowritebarriers,asthereisnoneedforacardtable

Page 74: Design rationales in the JRockit JVM

Mark&Sweep• BackboneofGCbasedontraditionaltri-colormarkandsweep

• Adaptivethreadusageandadditionalconcurrency

Page 75: Design rationales in the JRockit JVM

Mark&Sweep• Twocolors– notthree.

– Objectisinoneoftwosets– Liveobjects:greybits(mixofgrey&blackobjectsintraditional tri-coloring)

– Distinctionhandledbyputtinggreyobjectsinthreadlocalqueues foreachGCthread.

– Parallel threadscanworkonthreadlocaldata– Efficientprefetching ispossibleduetoFIFOorder.

Page 76: Design rationales in the JRockit JVM

Nopermgenever!

Page 77: Design rationales in the JRockit JVM

Othernicefeatures• Nopermgen!!!Ever!

Page 78: Design rationales in the JRockit JVM

Othernicefeatures• Nopermgen!!!Ever!• Pinnedobjects.– Fastmemorybuffers– Alsoenablenon-contiguousheaps

Page 79: Design rationales in the JRockit JVM

Othernicefeatures• Nopermgen!!!Ever!• Pinnedobjects.– Fastmemorybuffers.– Alsoenablenon-contiguousheaps.

• Compaction– “Internalandexternal”.– G1evacuatesregionsinsteadwithastoptheworld-and-copypolicysimilartoJRockit YC

Page 80: Design rationales in the JRockit JVM

Memorymanagement• Concurrent GChasanadditionalset:livebits

– Containsallliveobjectsinthesystem,includingthenewlycreatedones.

– JRockit canquicklyfindobjectsthathavebeencreatedduringaconcurrentmarkphase.

– Cardtables• NotjustforgenerationalGC• Alsotoavoidsearchingtheentireliveobjectgraphwhenaconcurrentmarkphasecleansup.

• Justlookatdirtycardsattheendofthemarkphase.

Page 81: Design rationales in the JRockit JVM

YoungCollections• Avariantofstopandcopyisused.– Allthreadsarehaltedandobjectsaredeletedorpromoted

– Hierarchicalbreadthfirstcopyforcachelocality• Parallelizesnicely• Manythreadsalwaysharvestayoungspace

Page 82: Design rationales in the JRockit JVM

YoungCollections• Youngandoldcollectionsmayoccuratsametime.– Allbitsetsanddatastructurescanbesharedaslongastheoldcollectionisguaranteedtoseeallcardsthathavebecomedirtyduringaconcurrentphase.(Extracardtabletorecordthis“difference”– “modifiedunionset”)

– Keepthisintactforoldcollection

Page 83: Design rationales in the JRockit JVM

ThreadLocalAllocation• Threadlocalallocation• ThreadlocalareasareroughlyL2cachesizedandobjectsareallocatedherebeforetheyareforcedupontheheap

Page 84: Design rationales in the JRockit JVM

CompressedReferences• Forlessthan4(or4*x)GBofmaximumheapsize

• Use32bitpointers(or32+log2(x)bits)

CompRef compress(Ref ref) {

return (uint32_t)ref; //truncate reference to 32-bits

}

Ref decompress(CompRef ref) {

return globalHeapBase | ref;

}

Page 85: Design rationales in the JRockit JVM

CompressedReferencesCompRef compress(Ref ref) {

return (uint32_t)ref; //truncate reference to 32-bits

}

Ref decompress(CompRef ref) {

return globalHeapBase | ref;

}

CompRef compress(Ref ref) {

return (uint32_t)(ref >> log2(objectAlignment));

}

Ref decompress(CompRef ref) {

return globalHeapBase | (ref << log2(objectAlignment));

}

Page 86: Design rationales in the JRockit JVM

DeterministicGC• QoSlevelforlatencies.“NomorethanXms”• Downtosingledigitsonmodernx86hardware

• Caveat:livedataonheapisthemainconstraint.– Upto50%ofheaplivedatastillfeasible

Page 87: Design rationales in the JRockit JVM

DeterministicGC

Page 88: Design rationales in the JRockit JVM

DeterministicGC– How?• Greedystrategy– Postponestoppingtheworldforaslongaspossible.

–Maybetheproblemgoesawayandwedon’thavetostoptheworld

• Splitupeverythingintoworkpackets– Dropthematanytime.

Page 89: Design rationales in the JRockit JVM

DeterministicGC– How?• Efficientparallelization.–Markphaseis90%ofGCtime

• Efficientheuristics– Somemoreworkine.g.writebarriers

Page 90: Design rationales in the JRockit JVM

ThreadsandSynchronization

Page 91: Design rationales in the JRockit JVM

ThreadsandSynchronization• Ajava.lang.Thread isanativethread.– Interesting,though:threadpoolingandpseudothin-threadsareback,forexampleinAkka.

– Java8– Collection.parallelStream– Theworldismovingtowardsimplicitparallelismingeneral

• MostoftheJRockitthreadcodeandadaptivitylogiciswritteninJava

Page 92: Design rationales in the JRockit JVM

ThreadsandSynchronization• Locksarethinorfat– Adaptiveinflationanddeflation

• Lazylocking(biasedlockingsupported)– Adaptiveheuristicsforbanningandretryingthelazyapproach.

Page 93: Design rationales in the JRockit JVM

ThreadsandSynchronizationpublic class PseudoSpinlock {

private static final int LOCK_FREE = 0; private static final int LOCK_TAKEN = 1;

public void lock() { //burn cycleswhile (cmpxchg(LOCK_TAKEN, &lock) == LOCK_TAKEN) {

micropause(); //optional}

}

public void unlock() { int old = cmpxchg(LOCK_FREE, &lock); //guard against recursive locksassert(old == LOCK_TAKEN);

} }

Page 94: Design rationales in the JRockit JVM

ThreadsandSynchronization• Locksarethinwhenfirsttaken• Timespentinlockandtimestakentriggersinflation

• wait ornotify immediatelyinflatesalock• Fatlocksarealsodeflatedwhenuncontendedfortoolong

Page 95: Design rationales in the JRockit JVM

ThreadsandSynchronization

Page 96: Design rationales in the JRockit JVM

ThreadsandSynchronizationThinlocklifecycle

Page 97: Design rationales in the JRockit JVM

ThreadsandSynchronizationThin&fatlocklifecycle

Page 98: Design rationales in the JRockit JVM

LockPairing• Bytecodeagain– norestrictiononmatchingmonitorenter withmonitorexit

• NotallofthemcanbeanalyzedbytheJIT

Page 99: Design rationales in the JRockit JVM

LockPairing• Wecanstorewhatweknow,andmakeunlocksquick.– Locktokens(theobjectOR3bits)

• Thin,fat,recursive, lazilytaken,unmatched

– Livemapsystemcontainsnestingorder.

Page 100: Design rationales in the JRockit JVM

Optimizations• Alotofsmallish codegentransforms: e.g.Lockfusion• “Fatspin”• Lazyunlocking(biasedlocking)

– Startassumingalllocksarelazy.Tagthinlocksaslazilylocked.– Ifobjectalreadylazilylocked

• Ifit’sthesamethread:profit• Else– stopthelockholder,detectthe“real”lockstatebystackwalk.Converttothinlockorforcefullyunlockit

– Transferbits– Heuristics:objectandclassbanning.Ageing.

Page 101: Design rationales in the JRockit JVM

ThreadsandSynchronizationThin,fat&lazylocklifecycle

Page 102: Design rationales in the JRockit JVM

Exportitall!– JRockitMissionControl

(nowJavaMissionControl)

@javamissionctrl$JAVA_HOME/bin/jmc

Page 103: Design rationales in the JRockit JVM

MissionControl• Use“free”runtimeinformation!

– JRockit(Java)MissionControl• JRockit(Java)flightrecorder• Memoryleakdetector(JRockitonly)• Managementconsole

• $JAVA_HOME/bin/JCMD (usedtobeJRCMD)• EverythingintheVMabstracted intoaneventthat

mayormaynothaveaduration• Soon:publicAPI

Page 104: Design rationales in the JRockit JVM

JavaFlightRecorder• Alwayson

– Excellentfordebuggingandanalysisofcrashes– Canbesettorecordmoreintrusivelyforperiodsinproduction

• E.g.extensive lockprofiling• Everythingisanevent• Bufferedrecording– thelastn secondsavailableatanycrashor

whenacommandisgiven.• Veryfineprecision.

– Multimediatimersandsystemhardwaresupportrequiredfore.g.latencies

Page 105: Design rationales in the JRockit JVM

LatencyAnalysis

Page 106: Design rationales in the JRockit JVM

TheManagementConsole• PeekintotherunningproductionJVM• Addtriggersonevents• InteractwiththeVM:forceGCetc.

Page 107: Design rationales in the JRockit JVM

TheMemoryLeakDetector• Introspectthetypegraphinrealtime.LookfortypesthataregrowingdespiteGC:s

Page 108: Design rationales in the JRockit JVM

Studyingarecordingoffline

Page 109: Design rationales in the JRockit JVM

JRockitVirtualEdition

Page 110: Design rationales in the JRockit JVM

IstheJVManOS?

Page 111: Design rationales in the JRockit JVM

IstheJVManOS?• Addacooperativeaspecttothreadswitching• Zero-copynetworkingcode• ReducecostofenteringOS• Balloondriver• Runsonlyonhypervisor• FacilitatespauselessGC

Page 112: Design rationales in the JRockit JVM

IstheJVManOS?

Page 113: Design rationales in the JRockit JVM

Thankyou!

Wouldyouliketo

knowmore?

OracleJRockit –

theDefinitiveGuide