SlideShare uma empresa Scribd logo
1 de 113
Baixar para ler offline
Design'Ra*onales'in'the'JRockit'JVM' 
Marcus'Lagergren' 
Java'Language'team,'Oracle'
Design'Ra*onales'in'the'JRockit'JVM' 
Marcus'Lagergren' 
Java'Language'team,'Oracle'
Design'Ra*onales'in'the'JRockit'JVM' 
Marcus'Lagergren' 
Java'Language'team,'Oracle'
Safe'Harbor'Statement' 
The following is intended to outline our 
general product direction. It is intended for 
information purposes only, and may not be 
incorporated into any contract. It is not a 
commitment to deliver any material, code, or 
functionality, and should not be relied upon 
in making purchasing decisions. 
The development, release, and timing of any 
features or functionality described for 
Oracles products remains at the sole 
discretion of Oracle.
Agenda' 
• In'the'beginning…' 
• What'did'we'accomplish'/'Internals' 
– Code'Genera*on' 
– Memory'Management' 
– Threads''Synchroniza*on' 
• Externals' 
– The'Java'Mission'Control'suite' 
– A'parenthesis'on'JRockit'VE' 
• QA'
About'the'speaker' 
@lagergren'
About'the'speaker' 
@lagergren'
Buy'this'book!'
About'the'speaker' 
• M.'Sc.'from'KTH,'Stockholm' 
– Narrowly'escaped'doing'a'PhD'on'bit'security'in' 
cryptographic'systems' 
• Run*me,'OS'and'compiler'engineer'since' 
1999,'with'some'startup'breaks' 
• One'of'the'original'creators'of'the'JRockit'JVM'
In'the'beginning'
Appeal'Virtual'Machines' 
• Appeal'SoYware'Solu*ons' 
– Consul*ng,'almost'exclusively'Java'by'1997' 
• S*ll'the'pre[app'server'era'
Appeal'Virtual'Machines' 
• We'saw'that'Java'would'be'great'on'the' 
server'side'
Appeal'Virtual'Machines' 
• We'saw'that'Java'would'be'great'on'the' 
server'side' 
– Shorter'development'cycles'–'money'in'the'bank' 
• Buffer'overrun'protec*on' 
• Automa*c'memory'management '' 
• Write'once'run'everywhere'
Appeal'Virtual'Machines' 
• We'saw'that'Java'would'be'great'on'the' 
server'side' 
– Shorter'development'cycles'–'money'in'the'bank' 
• Buffer'overrun'protec*on' 
• Automa*c'memory'management '' 
• Write'once'run'everywhere' 
• Tremendous'scalability'problems' 
• Sun'ClassicVM'was'all[encompassing'
JavaOne'1997' 
• Sun'Microsystems'presents'the'HotSpot' 
virtual'machine'
JavaOne'1997' 
• Sun'Microsystems'presents'the'HotSpot' 
virtual'machine' 
– “WOW!'This'is'the'way'to'do'it!'Adap*ve' 
run*mes!”'
JavaOne'1998' 
• Sun'Microsystems'presents'the'HotSpot' 
virtual'machine'again%
JavaOne'1998' 
• Sun'Microsystems'presents'the'HotSpot' 
virtual'machine'again% 
– “WTF!'This'is'slide[by[slide'the'exact'same' 
presenta*on'as'last'year!?!”' 
– We'can’t'wait'any'longer.'Let’s'build'our'own'VM.' 
How'hard'can'it'be?''
Crea*ng'our'own'JVM'['JRockit'
Produc*ze'a'narrower'domain?' 
• Server[side'usage'only.'Headless.'' 
– We'need'to'help'the'early'app'server'vendors'get' 
performance'and'scalability'
Produc*ze'a'narrower'domain?' 
• Server[side'usage'only.'Headless.'' 
– We'need'to'help'the'early'app'server'vendors'get' 
performance'and'scalability' 
• No'interpreter'' 
– “startup'*me'doesn’t'mader'on'the'server' 
anyway”'
Produc*ze'a'narrower'domain?' 
• Server[side'usage'only.'Headless.'' 
– We'need'to'help'the'early'app'server'vendors'get' 
performance'and'scalability' 
• No'interpreter'' 
– “startup'*me'doesn’t'mader'on'the'server' 
anyway”' 
• Green'threads'or'n'x'm'threads.'' 
– Explicit'parallelism'was'all[pervasive.'
Produc*ze'a'narrower'domain?' 
• Incremental'GC'' 
– We'thought'something'like'[Seligman,'Grarup]' 
would'suffice.''
Produc*ze'a'narrower'domain?' 
• Incremental'GC' 
– We'thought'something'like'[Seligman,'Grarup]' 
would'suffice.'' 
• Support'ourselves'on'consul*ng'only.' 
– Nope'–'needed'venture'capital'
The'Java'License' 
• You'can’t'call'yourself'“Java”'without'a' 
Java'license' 
• You'need'to'pass'the'TCK'test'suite' 
– Not'available'without'license' 
• To'get'a'Java'License'you'need'a'“value' 
add”'
The'Java'License' 
• What’s'a'“value'add”?'
The'Java'License' 
• What’s'a'“value'add”?'
The'Java'License' 
• What’s'a'“value'add”?'
The'Java'License' 
• What’s'a'“value'add”?' 
– Superior'performance!'
The'Java'License' 
• What’s'a'“value'add”?' 
– Superior'performance!' 
– What?'You'didn’t'like'that?'
The'Java'License' 
• What’s'a'“value'add”?' 
– Superior'performance!' 
– What?'You'didn’t'like'that?' 
– OK…'Let’s'see…'Err..'“managability”'
The'Java'License' 
• Java'License'was'granted'2001' 
– Helped'us'partner'up'with'BEA'Systems'and' 
Intel' 
– BEA'acquired'us'in'2002' 
– Oracle'acquired'BEA'in'2008' 
– Oracle'acquired'Sun'in'2010'
What'did'we'accomplish?'' 
!
The'real'value'adds'turned'out'to'be:'' 
• Mul*'*ered'support'for'paying'customers' 
– Part'of'the'WLS'stack' 
'
The'real'value'adds'turned'out'to'be:'' 
• Monitoring'and'Serviceability' 
– JRockit'Mission'Control'(now'Java'Mission' 
Control)' 
– Record'and'introspect'produc*on'systems'with' 
zero'overhead.' 
'
The'real'value'adds'turned'out'to'be:'' 
• Pioneered'“SoY'real*me”'GC' 
– Determinis*c'GC' 
– Low'latency'GC'
The'real'value'adds'turned'out'to'be:'' 
• Virtualiza*on' 
– JRockit'Virtual'Edi*on'–'an'opera*ng'system'for' 
Java' 
– Shorter'paths'between'Java'and'hardware' 
– Hypervisor'required' 
– JRockit'VE'on'virtual'hardware'outperformed' 
physical'Linux!' 
'
• The'benchmark'wars' 
– Constantly'keeping'it'going'with'Sun'and'IBM,' 
driving'Java'server[side'performance' 
' 
The'real'value'adds'turned'out'to'be:''
…'and'then' 
• JRockit'became'the'default'JVM'in'the'Oracle' 
stack'in'2008' 
• ExaLogic' 
'
INTERNALS! 
@SimmsUpNorth
Code'Genera*on'
Code'genera*on'–'No'Interpreter' 
• Keep'test'matrix'small' 
• Keep'opera*onal'complexity'down' 
• Targe*ng'server'side'apps'–'warmup'a'small' 
issue' 
• “Code'caching'/'AOT'can'be'done'later”'
Code'genera*on'–'One'JIT' 
• Keep'test'matrix'small' 
• Keep'opera*on'complexity'down' 
• Run'it'in'different'modes,'with'maximum'code' 
reuse' 
• Same'IR'throughout' 
– With'gradual'augmenta*ons'
But…' 
• Startup'became'a'problem' 
– We'removed'op*mizers'and'added'as'a'“spine”'to' 
the'normal'JIT'pipeline.'' 
• Lazy'code'genera*on'through'trampolines' 
• Same'mechanism'for'code'invalida*on' 
• Bookkeeping'to'iden*fy'a'program'point' 
down'to'any'individual'machine'instruc*on'
Code'Genera*on' 
• Same'“spine”'used'in'all'*ers'of'code' 
genera*on'
Code'Genera*on' 
• Same'“spine”'used'in'all'*ers'of'code' 
genera*on'
Op*miza*ons' 
• In'and'out'of'SSA' 
• Applied'to'all'levels'of'IR' 
– Loop%peeling,%value%numbering,%String%append%explosion,%Type%check%removal,% 
sign%extension%elimina;on,%copy%propaga;on,%bounds%check%removal,%virtual%to% 
fixed%calls,%inlining,%if%short%circui;ng,%straightening,%strength%reduc;on,% 
constant%propaga;on,%dead%code%removal,%out%of%loop%hois;ng,%explode% 
objects%and%array%copies,%boxing%%unboxing%removal,%local%escape%analysis,% 
ASM%peephole%op;miza;on,%redundant%memory%access%removal,%etc%etc%etc…% 
• Support'for'regionalized'IRs' 
• Graph'Fusion'Register'Allocator'
Op*miza*on'Targets' 
• Thread'sampling' 
• Partly'taken'over'by'safe'point'based' 
approach'in'R28' 
• Some'code'instrumenta*on,'for'example'for' 
inlining'path' 
– Not'in'the'general'case,'e.g'invoca*on'counters'
Op*miza*on'Targets' 
• Hardware'sampling'where'available' 
– Only'good'thing'about'IA64?' 
– Could'also'match'e.g.'L2'misses'to'program'points' 
• Bugging'the'processor'manufacturers'since' 
2002'about'userland'PC'sample'buffer.' 
• JRockit'VE'x'1000'more'samples'–'significantly' 
proven'shorter'warmup'
HotSpot'style?' 
• On[stack'replacement?' 
• Deop*miza*on?'
HotSpot'style?' 
• On[stack'replacement?' 
• Deop*miza*on?' 
• Never'much'cared'for'any'it';[)'
HotSpot'Style'OSR'and'Deop*miza*on' 
• We’ve'never'found'a'prac*cal'use'case.'' 
– So'we'can’t'ever'swap'out'the'main'func*on'with'the' 
microbenchmark'loop.'Who'cares?' 
• An'assump*on'is'invalidated' 
– Either'patch'code'directly'or'use'a'guard'when' 
genera*ng'it'in'the'first'place' 
• A'large'assump*on' 
– Write'a'trap'in'the'code'and'schedule'lazy' 
regenera*on'of'en*re'method' 
• Not'strictly'true'for'dynamic'languages'
HotSpot'Style'OSR'and'Deop*miza*on' 
• We’ve'never'found'a'prac*cal'use'case.'' 
– So'we'can’t'ever'swap'out'the'main'func*on'with'the' 
microbenchmark'loop.'Who'cares?' 
• An'assump*on'is'invalidated' 
– Either'patch'code'directly'or'use'a'guard'when' 
genera*ng'it'in'the'first'place' 
• A'large'assump*on' 
– Write'a'trap'in'the'code'and'schedule'lazy' 
regenera*on'of'en*re'method' 
• Not'strictly'true'for'dynamic'languages'
HotSpot'Style'OSR'and'Deop*miza*on' 
• We’ve'never'found'a'prac*cal'use'case.'' 
– So'we'can’t'ever'swap'out'the'main'func*on'with'the' 
microbenchmark'loop.'Who'cares?' 
• An'assump*on'is'invalidated' 
– Either'patch'code'directly'or'use'a'guard'when' 
genera*ng'it'in'the'first'place' 
• A'large'assump*on' 
– Write'a'trap'in'the'code'and'do'regenera*on'of'en*re' 
method' 
• Not'strictly'true'for'dynamic'languages'
HotSpot'Style'OSR'and'Deop*miza*on' 
• We’ve'never'found'a'prac*cal'use'case.'' 
– So'we'can’t'ever'swap'out'the'main'func*on'with'the' 
microbenchmark'loop.'Who'cares?' 
• An'assump*on'is'invalidated' 
– Either'patch'code'directly'or'use'a'guard'when' 
genera*ng'it'in'the'first'place' 
• A'large'assump*on' 
– Write'a'trap'in'the'code'and'do'regenera*on'of'en*re' 
method' 
• Not'strictly'true'for'dynamic'languages'
“Garbage'collec*ng'code”' 
• Code'kept'in'binary'tree'of'code'blocks'~'64M' 
– More'if'large'pages'enabled' 
• Class'loader'unloading'!'garbage'collec*on' 
• Reference'count'to'ac*ve'code'modified'when' 
backpatching' 
• Specialized'usage'of'code'blocks.' 
– Trampolines'only' 
– Op*mized'code'only'
Bytecode'is'bad'–'kill'it'quickly' 
• What’s'with'the'goto:s?' 
• Why'can'it'express'more'than'Java'source' 
code?'' 
– OK'we'understand'the'mul*'language' 
concept,'we'sorta'forgive'you.' 
– But'man,'dominators'and'loop'analysis'–' 
that’s'a'lot'of'compile'*me'
Bytecode'is'bad'–'kill'it'quickly' 
• …and'why'is'it'a'stack'machine'AND'a' 
register'machine'with'65535'registers'at' 
the'same'*me!? ' '' 
• Ini*ally'tried'to'reconstruct'ASTs' 
– Obfuscators'etc'made'this'predy'hopeless.' 
• ~15%'of'the'klocs'in'JRockit/codegen'do' 
flow'control'analysis'on'the'goto:s'
The'IR' 
• Use'IR'everywhere'(or'Java)' 
• The'IR'should'ideally'reflect'any'of'several' 
pluggable'frontends.' '' 
– We'played'around'with'CLR'a'bit.' 
– These'days'–'dynamic'languages':[)' 
• No'Sea'of'Nodes' 
• No'HotSpot'style'“high'level'IR'is'low' 
level”'
The'IR' 
• Simple'IR'in'MIR'form'(playorm'independent)'
The'IR'–'Design'Ra*onale' 
• We'had'some'compiler'experience'–'wanted' 
to'be'on'track'quickly.'Do'it'the'tradi*onal' 
way.' 
• We'are'not'“wrong”.'LLVM'is'very'similar.'
The'IR'–'Design'Ra*onale' 
• Tiered:%highest%;er%=='always'high'level' 
• Hardware'agnos*c.'' 
• No'architecture'specific'memory'ops' 
• Tiered:%lowest%;er%=='always'the'na*ve' 
architecture'instruc*on'for'instruc*on.'' 
• A'gradual'transi*on.'' 
• A'CPU'has'no'sea'of'nodes.'
The'IR' 
• Highest'IR'level'may'have'opera*ons'as' 
operands' 
• Intrinsics'everywhere' 
– arraycopy, membar, cmpuXX, sse4IndexOf, 
doubleToLongBits, crypto, Math.sin%and% 
so%on%…' 
• Regret'not'doing'more'in'SSA'form'
The'IRInfo'“database”' 
• Lazily'computable'informa*on' 
– Liveness' 
– Dominators' 
– Loop'informa*on' 
– Aliases' 
– Type'inference' 
– Ranges' 
– Nullness'analysis' 
– …' 
– Invalidate'on'modifica*on.' 
• Not'a'very'stable'model.'
Memory'management' 
!
Transi*on:'object'layout,'types'and' 
livemaps…'
Object'layout'and'types' 
• Object'headers'should'be'fixed'sized.' 
• JRockit'Object'header'is'32'+'32'bits'on'all' 
playorms'with'some'content'varia*ons.' 
• [Grove]'ramblings'on'object'models' 
• Type'tree'maintained'similar'to'[Krall,'Vitek,' 
Horspool]'' 
'
Livemaps'(oopmaps)' 
• Registers'and'stack'slots'on'the'local'frame' 
that'contain'objects.'' 
• Nothing'strange'here.'Required'for'non[ 
conserva*ve'garbage'collec*on'of'any'sort.' 
• Internal'pointer'bit' 
• Forms'the'root'set.'' 
• Rollforwarding'vs'the'safepoint'approach'
Transi*on'['Livemaps'
Memory'management' 
• Garbage'collectors' 
– Concurrent' 
– Parallel' 
– Determinis*c' 
• With'or'without'genera*ons'
Memory'management' 
• Concurrent'collec*on' 
– Your'basic'genera*onal'concurrent'mark'and' 
sweep'collector'[Printezis,'Detlefs]' 
– Supports'mul*'genera*on'(1)'young'spaces.' 
• Combats'heavy'object'alloca*on'situa*ons.' 
• Adap*vely'balanced'against'copy'overhead' 
– Write'barriers'before'object'writes' 
– Minimize'stopping'the'world' 
– Young'collec*ons'use'a'variant'of'stop''copy'
Memory'management' 
• Can'also'run'with'a'parallel'policy' 
– Stop'the'world'and'clean'up'quickly' 
– Only'throughput'oriented' 
– No'write'barriers,'as'there'is'no'need'for'a' 
card'table'
Mark''Sweep' 
• Backbone'of'GC'based'on'tradi*onal'tri[ 
color'mark'and'sweep' 
• Adap*ve'thread'usage'and'addi*onal' 
concurrency'
Mark''Sweep' 
• Two'colors'–'not'three.' 
– Object'is'in'one'of'two'sets' 
– Live'objects:'grey'bits'(mix'of'grey''black' 
objects'in'tradi*onal'tri[coloring)' 
– Dis*nc*on'handled'by'pu~ng'grey'objects'in' 
thread'local'queues'for'each'GC'thread.'' 
– Parallel'threads'can'work'on'thread'local'data' 
– Efficient'prefetching'is'possible'due'to'FIFO' 
order.'
No'permgen!' 
Ever!'
Other'nice'features' 
• No'permgen!!!'Ever!'
Other'nice'features' 
• No'permgen!!!'Ever!' 
• Pinned'objects.' 
– Fast'memory'buffers' 
– Also'enable'non[con*guous'heaps'
Other'nice'features' 
• No'permgen!!!'Ever!' 
• Pinned'objects.' 
– Fast'memory'buffers.' 
– Also'enable'non[con*guous'heaps.' 
• Compac*on' 
– “Internal'and'external”.'' 
– G1'evacuates'regions'instead'with'a'stop'the' 
world[and[copy'policy'similar'to'JRockit'YC'
Memory'management' 
• Concurrent'GC'has'an'addi*onal'set:'live'bits' 
– Contains'all'live'objects'in'the'system,'including' 
the'newly'created'ones.'' 
– JRockit'can'quickly'find'objects'that'have'been' 
created'during'a'concurrent'mark'phase.'' 
– Card'tables'' 
• Not'just'for'genera*onal'GC' 
• Also'to'avoid'searching'the'en*re'live'object'graph' 
when'a'concurrent'mark'phase'cleans'up.' 
• Just'look'at'dirty'cards'at'the'end'of'the'mark'phase.'
Young'Collec*ons' 
• A'variant'of'stop'and'copy'is'used.'' 
– All'threads'are'halted'and'objects'are' 
deleted'or'promoted' 
– Hierarchical'breadth'first'copy'for'cache' 
locality' 
• Parallelizes'nicely' 
• Many'threads'always'harvest'a'young' 
space'
Young'Collec*ons' 
• Young'and'old'collec*ons'may'occur'at'same' 
*me.' 
– All'bit'sets'and'data'structures'can'be'shared'as' 
long'as'the'old'collec*on'is'guaranteed'to'see'all' 
cards'that'have'become'dirty'during'a' 
concurrent'phase.'(Extra'card'table'to'record'this' 
“difference”'–'“modified'union'set”)'' 
– Keep'this'intact'for'old'collec*on'
Thread'Local'Alloca*on' 
• Thread'local'alloca*on'' 
• Thread'local'areas'are'roughly'L2'cache' 
sized'and'objects'are'allocated'here' 
before'they'are'forced'upon'the'heap'
Compressed'References' 
• For'less'than'4'(or'4'*'x)'GB'of'maximum' 
heap'size' 
• Use'32'bit'pointers'(or'32'+'log2(x)'bits)' 
CompRef compress(Ref ref) { 
return (uint32_t)ref; //truncate reference to 32-bits 
} 
Ref decompress(CompRef ref) { 
return globalHeapBase | ref; 
}
Compressed'References' 
• For'less'than'4'(or'4'*'x)'GB'of'maximum' 
heap'size' 
• Use'32'bit'pointers'(or'32'+'log2(x)'bits)' 
CompRef 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  log 
(objectAlignment)); 
2 
} 
Ref decompress(CompRef ref) { 
return globalHeapBase | (ref  log 
(objectAlignment)); 
2 
}
Determinis*c'GC' 
• QoS'level'for'latencies.'“No'more'than'X'ms”' 
• Down'to'single'digits'on'modern'x86' 
hardware' 
• Caveat:'live'data'on'heap'is'the'main' 
constraint.'' 
– Up'to'50%'of'heap'live'data's*ll'feasible'
Determinis*c'GC'
Determinis*c'GC'–'How?' 
• Greedy'strategy' 
– Postpone'stopping'the'world'for'as'long'as' 
possible.' 
– Maybe'the'problem'goes'away'and'we'don’t'have' 
to'stop'the'world' 
• Split'up'everything'into'work'packets' 
– Drop'them'at'any'*me.'
Determinis*c'GC'–'How?' 
• Efficient'paralleliza*on.' 
– Mark'phase'is'90%'of'GC'*me'' 
• Efficient'heuris*cs' 
– Some'more'work'in'e.g.'write'barriers'
Threads'and'Synchroniza*on' 
!
Threads'and'Synchroniza*on' 
• A'java.lang.Thread'is'a'na*ve'thread.' 
– Interes*ng,'though:'thread'pooling'and' 
pseudo'thin[threads'are'back,'for'example'in' 
Akka.' 
– Java'8'–'Collection.parallelStream 
– The'world'is'moving'towards'implicit' 
parallelism'in'general' 
• Most'of'the'JRockit'thread'code'and' 
adap*vity'logic'is'wriden'in'Java'
Threads'and'Synchroniza*on' 
• Locks'are'thin'or'fat'' 
– Adap*ve'infla*on'and'defla*on' 
• Lazy'locking'(biased'locking'supported)' 
– Adap*ve'heuris*cs'for'banning'and'retrying' 
the'lazy'approach.'
Threads'and'Synchroniza*on' 
public class PseudoSpinlock { 
private static final int LOCK_FREE = 0; 
private static final int LOCK_TAKEN = 1; 
public void lock() { 
//burn cycles 
while (cmpxchg(LOCK_TAKEN, lock) == LOCK_TAKEN) { 
micropause(); //optional 
} 
} 
public void unlock() { 
int old = cmpxchg(LOCK_FREE, lock); 
//guard against recursive locks 
assert(old == LOCK_TAKEN); 
} 
}
Threads'and'Synchroniza*on' 
• Locks'are'thin'when'first'taken' 
• Time'spent'in'lock'and'*mes'taken' 
triggers'infla*on' 
• wait'or'notify'immediately'inflates'a' 
lock' 
• Fat'locks'are'also'deflated'when' 
uncontended'for'too'long' 
'
Threads'and'Synchroniza*on'
Threads'and'Synchroniza*on' 
• Thin'lock'lifecycle'
Threads'and'Synchroniza*on' 
Thin''fat'lock'lifecycle'
Lock'Pairing' 
• Bytecode'again'–'no'restric*on'on' 
matching'monitorenter'with' 
monitorexit 
• Not'all'of'them'can'be'analyzed'by'the'JIT'
Lock'Pairing' 
• We'can'store'what'we'know,'and'make' 
unlocks'quick.'' 
– Lock'tokens'(the'object'OR'3'bits)' 
• Thin,'fat,'recursive,'lazily'taken,'unmatched' 
– Livemap'system'contains'nes*ng'order.'
Op*miza*ons' 
• A'lot'of'smallish'code'gen'transforms:'e.g.'Lock'fusion' 
• “Fat'spin”' 
• Lazy'unlocking'(biased'locking)' 
– Start'assuming'all'locks'are'lazy.'Tag'thin'locks'as'lazily' 
locked.' 
– If'object'already'lazily'locked' 
• If'it’s'the'same'thread:'profit' 
• Else'–'stop'the'lock'holder,'detect'the'“real”'lock'state'by'stack' 
walk.'Convert'to'thin'lock'or'forcefully'unlock'it' 
– Transfer'bits' 
– Heuris*cs:'object'and'class'banning.'Ageing.'
Threads'and'Synchroniza*on' 
• Thin,'fat''lazy'lock'lifecycle'
Export'it'all!'–'JRockit'Mission'Control' 
(now'Java'Mission'Control)' 
! 
@javamissionctrl! 
$JAVA_HOME/bin/jmc
Mission'Control' 
• Use'“free”'run*me'informa*on!' 
– JRockit'(Java)'Mission'Control' 
• JRockit'(Java)'flight'recorder' 
• Memory'leak'detector'(JRockit'only)' 
• Management'console' 
• $JAVA_HOME/bin/JCMD'(used'to'be'JRCMD)' 
• Everything'in'the'VM'abstracted'into'an' 
event'that'may'or'may'not'have'a'dura*on' 
• Soon:'public'API'
Java'Flight'Recorder' 
• Always'on' 
– Excellent'for'debugging'and'analysis'of'crashes' 
– Can'be'set'to'record'more'intrusively'for'periods'in' 
produc*on' 
• E.g.'extensive'lock'profiling' 
• Everything'is'an'event' 
• Buffered'recording'–'the'last'n'seconds'available' 
at'any'crash'or'when'a'command'is'given.' 
• Very'fine'precision.' 
– Mul*media'*mers'and'system'hardware'support' 
required'for'e.g.'latencies'
Latency'Analysis'
The'Management'Console' 
• Peek'into'the'running'produc*on'JVM' 
• Add'triggers'on'events' 
• Interact'with'the'VM:'force'GC'etc.'
The'Memory'Leak'Detector' 
• Introspect'the'type'graph'in'real*me.' 
Look'for'types'that'are'growing'despite' 
GC:s' 
• “Trending'alloca*ons”'
Studying'a'recording'offline'
JRockit'Virtual'Edi*on'
Is'the'JVM'an'OS?'
Is'the'JVM'an'OS?' 
• Add'a'coopera*ve'aspect'to'thread'switching' 
• Zero[copy'networking'code' 
• Reduce'cost'of'entering'OS' 
• Balloon'driver' 
• Runs'only'on'hypervisor' 
• Facilitates'pauseless'GC'
Is'the'JVM'an'OS?'
Thank'you!' 
' 
Would!you!like!to!! 
know!more?! 
Oracle'JRockit'–'' 
the'Defini3ve'Guide'
Jug.ru 2014-j rockit architecture copy

Mais conteĂşdo relacionado

Semelhante a Jug.ru 2014-j rockit architecture copy

Architecture Evolution at Wooga
Architecture Evolution at WoogaArchitecture Evolution at Wooga
Architecture Evolution at Wooga
Amazon Web Services
 
The Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always WantedThe Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always Wanted
Thoughtworks
 

Semelhante a Jug.ru 2014-j rockit architecture copy (20)

The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
 
CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?
 
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitchesDEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
 
Scala Introduction.pptx
Scala Introduction.pptxScala Introduction.pptx
Scala Introduction.pptx
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-lugano
 
Architecture Evolution at Wooga (AWS Cloud Computing for Developers,)
Architecture Evolution at Wooga (AWS Cloud Computing for Developers,)Architecture Evolution at Wooga (AWS Cloud Computing for Developers,)
Architecture Evolution at Wooga (AWS Cloud Computing for Developers,)
 
Architecture Evolution at Wooga
Architecture Evolution at WoogaArchitecture Evolution at Wooga
Architecture Evolution at Wooga
 
Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnostic
 
The Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always WantedThe Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always Wanted
 
Spring ME
Spring MESpring ME
Spring ME
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
 
Surviving Serverless Testing: The ultimate Guide
Surviving Serverless Testing: The ultimate GuideSurviving Serverless Testing: The ultimate Guide
Surviving Serverless Testing: The ultimate Guide
 
Architecture in an Agile World
Architecture in an Agile WorldArchitecture in an Agile World
Architecture in an Agile World
 
Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled Cucumbers
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
 
"Black Clouds and Silver Linings in Node.js Security" Liran Tal
"Black Clouds and Silver Linings in Node.js Security" Liran Tal"Black Clouds and Silver Linings in Node.js Security" Liran Tal
"Black Clouds and Silver Linings in Node.js Security" Liran Tal
 
Erjang - A journey into Erlang-land
Erjang - A journey into Erlang-landErjang - A journey into Erlang-land
Erjang - A journey into Erlang-land
 
Intro to Continuous Integration at SoundCloud
Intro to Continuous Integration at SoundCloudIntro to Continuous Integration at SoundCloud
Intro to Continuous Integration at SoundCloud
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mruby
 

Mais de Marcus Lagergren

Mais de Marcus Lagergren (6)

A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9A new execution model for Nashorn in Java 9
A new execution model for Nashorn in Java 9
 
Javaland keynote final
Javaland keynote finalJavaland keynote final
Javaland keynote final
 
Geek out 2014-lagergren-final
Geek out 2014-lagergren-finalGeek out 2014-lagergren-final
Geek out 2014-lagergren-final
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-final
 
Jax keynote
Jax keynoteJax keynote
Jax keynote
 
Optimizing JavaScript and Dynamic Languages on the JVM
Optimizing JavaScript and Dynamic Languages on the JVMOptimizing JavaScript and Dynamic Languages on the JVM
Optimizing JavaScript and Dynamic Languages on the JVM
 

Último

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 

Último (20)

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 

Jug.ru 2014-j rockit architecture copy