sfdc_ppt_corp_template_01_01_2012.ppt
Extreme Performance with Java
QCon NYC - June 2012 Charlie Hunt Architect, Performance Engineering Salesforce.com
Extreme Performance with Java QCon NYC - June 2012 Charlie Hunt - - PowerPoint PPT Presentation
Extreme Performance with Java QCon NYC - June 2012 Charlie Hunt Architect, Performance Engineering Salesforce.com sfdc_ppt_corp_template_01_01_2012.ppt In a Nutshell What you need to know about a modern JVM in order to be effective at
sfdc_ppt_corp_template_01_01_2012.ppt
QCon NYC - June 2012 Charlie Hunt Architect, Performance Engineering Salesforce.com
New object allocations
New object allocations Retention / aging of young
New object allocations Retention / aging of young
Promotions of longer lived objects during minor GCs
impact on latency
impact on latency
impact on latency
generation collection, or old generation compaction (i.e. full GC) … or some kind of disruptive GC activity
generation collection, or old generation compaction (i.e. full GC) … or some kind of disruptive GC activity
throughput, smallest footprint and lowest latency
throughput, smallest footprint and lowest latency
avoided by “partial” old generation collection
“steady state”
with an object
cleared
degree of object retention
cleared
degree of object retention
class MyImpl extends ClassWithFinalizer { private byte[] buffer = new byte[1024 * 1024 * 2]; ....
class MyImpl extends ClassWithFinalizer { private byte[] buffer = new byte[1024 * 1024 * 2]; ....
class MyImpl extends ClassWithFinalizer { private byte[] buffer = new byte[1024 * 1024 * 2]; ....
class MyImpl { private ClassWithFinalier classWithFinalizer; private byte[] buffer = new byte[1024 * 1024 * 2];
program has been executing – it knows nothing about what has not been classloaded or executed
program has been executing – it knows nothing about what has not been classloaded or executed
information around to “recover” which (may) limit type(s) of
1 implementation of a virtualized method … effectively makes it a mono-morphic call
1 implementation of a virtualized method … effectively makes it a mono-morphic call
implementation it must de-optimize, re-optimize for 2nd implementation … now we have a bi-morphic call
performance, especially true when / if you get to the 3rd implementation because now its a mega-morphic call
will slow down your application
will slow down your application
will slow down your application
will slow down your application
will slow down your application
how to best optimize it
as necessary
Code cache : holds JIT compiled code
JConsole
re-initiate new compilations, i.e. -XX:+PrintCompilation shows “made not entrant” and “made zombie”, but not new activations
been exhausted previously – can be very misleading!
Update releases
+UseCodeCacheFlusing & increase ReservedCodeCacheSize
GCViewer”) – both are GC log visualizers
launched as 'jvisualvm')
required
recent, some issues observed on Linux x64)
counter
both JIT compiler and GC along with many other “goodies”
about GCs, (used in any programming language)