SlideShare ist ein Scribd-Unternehmen logo
1 von 113
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie Jug.ru 2014-j rockit architecture copy

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...Thoughtworks
 
CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?CPU vulnerabilities - where are we now?
CPU vulnerabilities - where are we now?DefCamp
 
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 stitchesFelipe Prado
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-luganoFabrizio Giudici
 
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,)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.Kris Buytaert
 
Padrino is agnostic
Padrino is agnosticPadrino is agnostic
Padrino is agnosticTakeshi Yabe
 
The Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always WantedThe Enterprise Architecture You Always Wanted
The Enterprise Architecture You Always WantedThoughtworks
 
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 CodeKris Buytaert
 
Surviving Serverless Testing: The ultimate Guide
Surviving Serverless Testing: The ultimate GuideSurviving Serverless Testing: The ultimate Guide
Surviving Serverless Testing: The ultimate GuideOPEN KNOWLEDGE GmbH
 
Architecture in an Agile World
Architecture in an Agile WorldArchitecture in an Agile World
Architecture in an Agile WorldDon McGreal
 
Rocket Fuelled Cucumbers
Rocket Fuelled CucumbersRocket Fuelled Cucumbers
Rocket Fuelled CucumbersJoseph Wilk
 
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-xmxMilen Dyankov
 
"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 TalJulia Cherniak
 
Erjang - A journey into Erlang-land
Erjang - A journey into Erlang-landErjang - A journey into Erlang-land
Erjang - A journey into Erlang-landKresten Krab Thorup
 
Intro to Continuous Integration at SoundCloud
Intro to Continuous Integration at SoundCloudIntro to Continuous Integration at SoundCloud
Intro to Continuous Integration at SoundCloudgarriguv
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mrubyHiroshi SHIBATA
 

Ähnlich wie 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
 

Mehr von Marcus Lagergren

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 9Marcus Lagergren
 
Geek out 2014-lagergren-final
Geek out 2014-lagergren-finalGeek out 2014-lagergren-final
Geek out 2014-lagergren-finalMarcus Lagergren
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-finalMarcus Lagergren
 
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 JVMMarcus Lagergren
 

Mehr von 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
 

Kürzlich hochgeladen

8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
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 SimplicityWSO2
 
%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 Hararemasabamasaba
 
%+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
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park 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
 
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 PlatformlessWSO2
 
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 🔝✔️✔️Delhi Call girls
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 

Kürzlich hochgeladen (20)

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...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
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
 
%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
 
%+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...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+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...
 
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
 
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 🔝✔️✔️
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 

Jug.ru 2014-j rockit architecture copy