SlideShare a Scribd company logo
1 of 174
1
THE	
PERFORMANCE	
ENGINEER’S	
GUIDE	TO	
HOTSPOT	VIRTUAL	
MACHINE'S	
EXECUTION	ENGINE
2
About Me …
Java/JVM/GC performance engineer
Current Life: Consultant who solves Managed Runtime
performance issues
Past Life: Worked with Oracle, Sun, AMD…
Worked with HotSpot VM: JVM heuristics, JIT compiler, GCs:
Parallel(Old) GC, G1 GC, CMS GC
www.codekaram.com
https://www.linkedin.com/in/monicabeckwith
Tweet @mon_beck
©2017 CodeKaram
Establishing the Characters
and The Plot
3
• HotSpot Virtual Machine
• The Helpers
• The Execution Engine
• The Runtime
• Driving Innovations in Performance
• The Trifecta
©2017 CodeKaram
The Storyline
4
• Dive into the Influence of Footprint, Throughput
and Responsiveness on the HotSpot Execution
Engine and Runtime.
• Various Optimizations.
5
HotSpot Virtual Machine
©2017 CodeKaram
Let’s Peek Under The Hood
6
Java Application
Java
API
Java VM
OS + Hardware
©2017 CodeKaram7
Java Application
Java
API
Java VM
OS + HardwareJRE
Java Runtime Environment
©2017 CodeKaram
The Helpers
8
Java VM
Execution Engine
Runtime
©2017 CodeKaram
The Helpers
9
Java VM
Execution Engine
Runtime
10
The Execution Engine
©2017 CodeKaram
Execution Engine
11
Heap
Management
- Garbage
Collection
Compilation
©2017 CodeKaram12
Allocation
+
Reclamation
Heap Management
©2017 CodeKaram
Compilation
13
Adaptive
Optimization
Ahead
Of
Time
Profile-
guided
Static
©2017 CodeKaram
The Helpers
14
Java VM
Execution Engine
Runtime
15
The Runtime
©2017 CodeKaram
HotSpot VM
16
Runtime
VM Class
loading
Interpreter
Bytecode
Verification,
Exception
Handling,
Synchronization
, Thread
Management, ….http://openjdk.java.net/groups/hotspot/
docs/RuntimeOverview.html
©2017 CodeKaram
Runtime Goal
17
Bytecode
Native code
18
What Drives Innovations in
Performance?
©2017 CodeKaram
The Trifecta of Performance
• Responsiveness
• Footprint
• Throughput
19
©2017 CodeKaram
If I send a stimulus now, how much time
’til I get a response back?
20
Responsiveness
©2017 CodeKaram
Can I fit in more?
OR
How can I optimize out redundancy and
compact?
21
FootPrint
©2017 CodeKaram
How can I maximize the operations per
second of my system?
22
Throughput
23
Responsiveness, the Execution
Engine and the Runtime
©2017 CodeKaram
Responsiveness and GC
24
GC
Faster Allocation Paths
Faster Reclamation
More Work Done Concurrently
©2017 CodeKaram
Responsiveness and
Compilation
25
Compilation
Ahead-Of-Time
Adaptive Optimizer
Locking Improvements
©2017 CodeKaram
Responsiveness and the
Runtime
26
Runtime
Locking Improvements
Class Data Sharing
©2017 CodeKaram
Uncontended Locks
27
A	single	thread	‘t’	is	executing	a	synchronized	
method
©2017 CodeKaram
Uncontended Locks
• Deflated locks
• aka light weight locks
• Compare and Swap (CAS) stores pointer to a
lock record in the object header.
28
©2017 CodeKaram
Contended Locks
29
A	different	thread	‘u’	wants	to	enter	the	
synchronized	method	that	is	already	locked	by	
thread	‘t’
©2017 CodeKaram
Contended Locks
• Inflated locks
• ak heavy weight locks
• Slower path
• Object monitors maintain their wait-sets
30
31
Wait Queue
Object Monitor
Entry Queue
Monitor.
Enter()
Monitor.
Exit()
©2017 CodeKaram
Locking Improvements
• Biased Locking
• Lock Elision
• Lock Coarsening
• Contended Locking - Quick Path
32
©2017 CodeKaram
Contended Lock
33
Runtime	–
contention	/	inflated	lock
?
ObjectMonitor::enter
ObjectSynchronizer::slow_enter
©2017 CodeKaram
Contended Lock
Optimization
34
ObjectSynchronizer::quick_enter
Runtime	–
contention	/	inflated	lock
?
ObjectMonitor::enter
ObjectSynchronizer::slow_enter
35
Footprint, the Execution
Engine and the Runtime
©2017 CodeKaram
Footprint and GC
36
GC
Compaction
Algorithm Refinements In Reducing Allocations
Compressed Headers
©2017 CodeKaram
FootPrint and Compilation
37
Compilation
Inlining
Escape Analysis
Zombie Code (Deopt)
38
Advanced Optimization -
Escape Analysis
©2017 CodeKaram
• Entire IR graph
• escaping allocations?
• not stored to a static field or non-static field of
an external object,
• not returned from method,
• not passed as parameter to another method
where it escapes.
39
Escape Analysis
©2017 CodeKaram40
Escape Analysis
allocated object doesn’t
escape the compiled method
allocated object not
passed as a parameter
+
remove allocation and lock (lock
elision) and keep field values in
registers
=
©2017 CodeKaram41
Escape Analysis
allocated object is
passed as a parameter
+
perform lock elision and use optimized
compare instructions
=
allocated object doesn’t
escape the compiled method
©2017 CodeKaram
FootPrint and the Runtime
42
Runtime
Compressed Oops And Class Pointers
Code Caches
Class Data Sharing
43
Advanced Optimizations -
Compressed Oops +
Compressed Class Pointers
44
A Java Object
©2017 CodeKaram45
Header Body
46
A Java Object Header
©2017 CodeKaram
A Java Object Header
47
Header
Klass
Mark
Word
Array
Length
©2017 CodeKaram
Compressed OOPs and
Compressed Class Pointers
48
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit
shift.
49
Let’s talk about the 3-bit shift
first!
50
All Java objects are 8 byte
aligned.
51
IF we left shift by 3, we can
have 2^35 = 32GB of
addressable space.
©2017 CodeKaram
Compressed OOPs
52
<wide-oop> = <narrow-oop-base> +
(<narrow-oop> << 3) + <field-offset>
©2017 CodeKaram
Compressed OOPs
53
Heap Size?
<4 GB
(no encoding/
decoding needed)
>4GB; <28GB
(zero-based)
<wide-oop> = <narrow-oop> <narrow-oop> << 3
©2017 CodeKaram
Compressed OOPs
54
Heap Size?
>28 GB; <32 GB
(regular)
>32 GB; <64 GB *
(change alignment)
<wide-oop> =
<narrow-oop-base>
+ (<narrow-oop>
<< 3) + <field-
offset>
<narrow-oop-base>
+ (<narrow-oop>
<< 4) + <field-
offset>
©2017 CodeKaram
Compressed OOPs
55
Heap Size? <4 GB
>4GB;
<28GB
<32GB <64GB
Object
Alignment?
8 bytes 8 bytes 8 bytes 16 bytes
Offset
Required?
No No Yes Yes
Shift by? No shift 3 3 4
©2017 CodeKaram
Compressed Class Pointers
56
• JDK 8 —> Perm Gen Removal —> Class Data outside of
heap
• Compressed class pointer space
• contains class metadata
• is a part of Metaspace
©2017 CodeKaram
Compressed Class Pointers
57
PermGen Removal Overview by Coleen Phillimore + Jon Masamitsu @JavaOne 2013
58
Throughput, the Execution
Engine and the Runtime
©2017 CodeKaram
Throughput and GC
59
GC
Multi-Threaded Work Stealing
Multi-Generational Heap
Multi-Phase Marking
(Incremental) Compaction
©2017 CodeKaram
Throughput and Compilation
60
Compilation
JIT
Intrinsics
Vectorization
Loop Unrolling
61
JIT Optimization - Intrinsics
©2017 CodeKaram62
Without Intrinsics
Java Method
JIT Compilation
Execute Generated Code
©2017 CodeKaram63
Intrinsics
Java Method
JIT Compilation
Execute Optimized Code
Call Hand-
Optimized
Assembly Code
©2017 CodeKaram
Throughput and the Runtime
64
Runtime
Compressed Oops
Compressed Class Pointers
65
HotSpot’s GC Facts and
Performance Innovations
©2017 CodeKaram
GC
66
Responsiveness Throughput Footprint
Faster Allocation
Paths
Multi-Threaded
Work Stealing
Compaction
Faster
Reclamation
Multi-
Generational
Heap
Algorithm
Refinements In
Reducing
AllocationsMore Work Done
Concurrently
Multi-Phase
Marking
Incremental
Compaction
Compressed
Headers
67
Footprint Optimizations
68
String Interning and
Deduplication
©2017 CodeKaram69
Java String Object
String1
String1
Object
char []
70
What If String1 Is Interned?
©2017 CodeKaram71
Java Interned String Object
String1
String1
Object
char []
StringX
Object
char []
StringY
Object
char []
Pool of
Strings
Java Heap
©2017 CodeKaram72
Java Interned String Objects
String1
String1
Object
char []
String2
String2
Object
char []
73
If String1.intern() ==
String2.intern() then
String1.equals(String2) is TRUE.
©2017 CodeKaram74
Java Interned String Objects
String1
String1
Object
char []
StringX
Object
char []
StringY
Object
char []
String2
Pool of
Strings
Java Heap
75
What If String1.equals(String2)
And Both Are Not Interned*?
*
And You Are Using The G1 Collector
©2017 CodeKaram76
Java String Deduplication
(G1)
String1
String1
Object
char []
String2
String2
Object
©2017 CodeKaram
Almost all GCs in OpenJDK HotSpot are
generational.
77
GC Fact #1
©2017 CodeKaram
GC
78
Responsiveness Throughput Footprint
Faster
Allocation Paths
Multi-Threaded
Work Stealing
Compaction
Faster
Reclamation
Multi-
Generational
Heap
Algorithm
Refinements In
Reducing
AllocationsMore Work Done
Concurrently
Multi-Phase
Marking
(Incremental)
Compaction
Compressed
Headers
©2017 CodeKaram79
Young
Generation
Old
Generation
Eden Survivors
©2017 CodeKaram
The Generational Java Heap
Eden S0 S1 Old Generation
Young Generation
Allocations Survivors
Tenured
80
©2017 CodeKaram
GC
81
Faster
Allocation
Paths
Multi-Threaded
Work Stealing
Faster
Reclamation
Multi-
Generational
Heap
More Work
Done
Concurrently
Multi-Phase
Marking
(Incremental)
Compaction
Allocation
+
Reclamation
& Promotions
82
Garbage Collection -
Allocation.
©2017 CodeKaram
GC
83
Faster
Allocation
Paths
Faster
Reclamation
Multi-
Generational
Heap
Allocation
©2017 CodeKaram84
Eden
Allocations
Survivors
Young Generation
85
Fast Path Allocation ==
Lock-Free Allocation ==
Threads Allocate Into Their
Local Allocation Buffer (LAB)s
©2017 CodeKaram86
Eden
TLAB TLAB TLAB TLAB TLAB
TLAB = Thread Local Allocation Buffer
©2017 CodeKaram87
EdenThread 1
Thread 2
Thread 3
Thread 4
TLAB TLAB TLAB TLAB TLAB
Thread 0
©2017 CodeKaram88
Eden
Allocations
Survivors
Young Generation
S0 S1
©2017 CodeKaram89
Eden
Allocations
Survivors
Young Generation
S0 S1
90
Allocation - Non Uniform
Memory Access (NUMA) Aware
Allocator.
©2017 CodeKaram
NUMA
Processing
Node 0
Memory
Controller
DRAM
Bank
Processing
Node 2
Memory
Controller
DRAM
Bank
Processing
Node 1
Memory
Controller
DRAM
Bank
Processing
Node 3
Memory
Controller
DRAM
Bank
91
©2017 CodeKaram
UseNUMA
92
Processing
Node 0
Memory
Controller
DRAM
Bank
Processing
Node 1
Memory
Controller
DRAM
Bank
Thread 0
Area
for
Node 0
Area
for
Node 1
Thread 1
Thread 2
Eden
93
UseNUMA
UseNUMAInterleaving
UseAdaptiveNUMAChunkSizing
NUMAStats
94
Garbage Collection -
Reclamation.
©2017 CodeKaram
GC
95
Multi-Threaded
Work Stealing
Faster
Reclamation
Multi-
Generational
Heap
More Work
Done
Concurrently
Multi-Phase
Marking
(Incremental)
Compaction
Reclamation
©2017 CodeKaram96
Young Generation Old Generation
Eden S0 S1
©2017 CodeKaram97
*Similar GC
Algorithms for
generational
OpenJDK HotSpot
Different GC Algorithms
for OpenJDK Hotspot
Young Generation Old Generation
©2017 CodeKaram98
*Similar GC
Algorithms for
generational
OpenJDK HotSpot
Different GC Algorithms
for OpenJDK Hotspot
Young Generation Old Generation
©2017 CodeKaram99
Throughput
Maximizer • Multi-
generation heap
• Multi-threaded
workers
• Compacting
collector
• Faster
reclamation via
PLABS
(Promotion
Local Area
Buffers)
Parallel GC
©2017 CodeKaram100
Latency
Sensitive
CMS GC
• Multi-
generation heap
• Multi-threaded
workers*
• More work
done
concurrently
• Multi-phased
marking
©2017 CodeKaram101 ©2017 CodeKaram
• Multi-
generation heap
• Multi-threaded
workers
• More work
done
concurrently
• Multi-phased
marking
• Multi-
generation heap
• Multi-threaded
workers
• Incrementally
compacting
collector
• Faster
reclamation via
PLABS
Throughput
Maximizer
Latency
Sensitive
G1 GC
©2017 CodeKaram102
Throughput
Maximizer
Latency
Sensitive
Parallel GC
CMS GC
G1 GC
©2017 CodeKaram
HotSpot GCs
103
HotSpot’s Compilation Engine
Performance Innovations
©2017 CodeKaram
Compilation Engine
104
Responsiveness Throughput Footprint
Ahead-Of-Time JIT Inlining
Adaptive
Optimizer
Intrinsics Escape Analysis
Locking
Improvements
Vectorization
Zombie Code
(Deopt)
Loop Unrolling
©2017 CodeKaram
Compilation
105
Adaptive
Optimization
Ahead
Of
Time
Profile-
guided
Static
©2017 CodeKaram
• CompileThreshold
• Identify root of compilation
• Method Compilation or On-stack
replacement (Loop)?
106
Identifying Performance
Critical Methods
107
JIT Optimization - Client
Compiler (C1)
©2017 CodeKaram
• Start in interpreter
• CompileThreshold = 1500
• Compile with client compiler
• Few optimizations
108
Client Compiler
109
JIT Optimization - Server
Compiler (C2)
©2017 CodeKaram
• Start in interpreter
• CompileThreshold = 10000
• Compile with optimized server compiler
• High performance optimizations
110
Server Compiler
111
JIT Optimization - Tiered
Compilation
112
©2017 CodeKaram
• Start in interpreter
• Tiered optimization with client compiler
• Code profiled information
• Enable server compiler
113
Tiered Compilation
©2017 CodeKaram114
Tiered Compilation - Effect
on Code Cache
Tiered
Compilation
Code
Cache
Compiled
Native Code
©2017 CodeKaram
• C1 compilation threshold for tiered is about a 100
invocations
• Tiered Compilation has a lot more profiled information
for C1 compiled methods
• CodeCache needs to be 5x larger than non-tiered
• Default on JDK8 when tiered is enabled (240MB vs
48MB)
• Need more? Use -XX:ReservedCodeCacheSize
115
Tiered Compilation - Effect
on Code Cache
116
Advanced Optimizations -
Adaptive Optimization
©2017 CodeKaram117
The Plot
Startup
(Adaptive) JIT
Optimizations
Profiling of
critical hot-
spots
Interpreter
©2017 CodeKaram118
The Plot
Startup
(Adaptive) JIT
Optimizations
Profiling of
critical hot-
spots
Interpreter
119
Adaptive Optimization:
Dynamic Deoptimization
120
Dynamic Deoptimization
©2017 CodeKaram
• Oopsie!
• dependencies invalidation
• classes unloading and redefinition
• uncommon path in compiled code
• misguided profiled information
121
Dynamic Deoptimization
122
Advanced Optimization -
Vectorization
123
Vectorization in HotSpot
VM??
©2017 CodeKaram
Vectorization
124
• Utilize SIMD (Single Instruction Multiple Data)
instructions offered by the processor.
• Generate assembly stubs
• Get benefits of operating on cache line size data
chunks
125
Advanced Optimization -
Auto-Vectorization
126
Auto-Vectorization in
HotSpot VM??
127
Look Ma, no stubs!!
128
©2017 CodeKaram
SuperWord Level Parallelism
129
http://groups.csail.mit.edu/cag/slp/SLP-PLDI-2000.pdf
©2017 CodeKaram
SuperWord Level Parallelism
130
• Loop Unrolling
• Alignment Analysis
• Pre-Optimization
• Identifying Adjacent Memory References
• Extending the “PackSet”
• Combination and SIMD operation
http://groups.csail.mit.edu/cag/slp/SLP-PLDI-2000.pdf
131
That’s all I got! :)
©2017 CodeKaram
Further Reading
132
• https://wiki.openjdk.java.net/display/HotSpot/
Server+Compiler+Inlining+Messages
• https://wiki.openjdk.java.net/display/HotSpot/
EscapeAnalysis
• Compressed Class Pointers: https://youtu.be/
AHtfza2Tkt0?t=754
• String Deduplication: http://openjdk.java.net/jeps/192
• Perm Gen Removal: http://www.infoq.com/articles/Java-
PERMGEN-Removed
Appendix
133
134
HotSpot’s Runtime Performance
Innovations
©2017 CodeKaram
Runtime
135
Responsiveness Throughput Footprint
Locking
Improvements
Compressed
Oops
Compressed
Oops And Class
Pointers
Class Data
Sharing
Compressed
Class Pointers
Code Cache
Class Data
Sharing
136
Advanced Optimizations -
Compressed Oops +
Compressed Class Pointers
©2017 CodeKaram
Objects, Fields & Alignment
• Objects are 8 byte aligned (default).
• Fields:
• are aligned by their type.
• can fill a gap that maybe required for
alignment.
• are accessed using offset from the start of the
object
137
138
Java Object Layout in Memory
©2017 CodeKaram139
-Tool to analyze Java object layout :)
Java Object Layout (JOL)
©2017 CodeKaram
JOL Command Line Options
$ java -jar jol-cli.jar
Usage: jol-cli.jar <mode> [optional arguments]*
Available modes:
estimates: Simulate the class layout in different VM modes.
externals: Show the object externals: the objects reachable
from a given instance.
footprint: Estimate the footprint of all objects reachable
from a given instance
heapdump: Consume the heap dump and estimate the savings
in different layout strategies.
heapdumpstats: Consume the heap dump and print the most
frequent instances.
idealpack: Compute the object footprint under different
field layout strategies.
internals: Show the object internals: field layout and
default contents, object header
shapes: Dump the object shapes present in JAR files or
heap dumps.
string-compress: Consume the heap dumps and figures out the
savings attainable with compressed strings.
140
©2017 CodeKaram
JOL Command Line Options
$ java -jar jol-cli.jar
Usage: jol-cli.jar <mode> [optional arguments]*
Available modes:
estimates: Simulate the class layout in different VM modes.
externals: Show the object externals: the objects reachable from
a given instance.
footprint: Estimate the footprint of all objects reachable from
a given instance
heapdump: Consume the heap dump and estimate the savings in
different layout strategies.
heapdumpstats: Consume the heap dump and print the most frequent
instances.
idealpack: Compute the object footprint under different field
layout strategies.
internals: Show the object internals:
field layout and default contents, object header
shapes: Dump the object shapes present in JAR files or heap
dumps.
string-compress: Consume the heap dumps and figures out the savings
attainable with compressed strings.
141
©2017 CodeKaram
Compressed OOPs and
Compressed Class Pointers
142
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit
shift.
©2017 CodeKaram
Compressed OOPs and
Compressed Class Pointers
143
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit
shift.
144
A Java Object Header
©2017 CodeKaram
A Java Object Header
145
Header
Klass
Mark
Word
Array
Length
146
Java Object Layout Samples -
Uncompressed
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07
c0 34 (10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00
00 00 (00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4
bytes total
147
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07
c0 34 (10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00
00 00 (00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4
bytes total
148
Mark Word
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07
c0 34 (10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00
00 00 (00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4
bytes total
149
Klass
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07
c0 34 (10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00
00 00 (00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4
bytes total
150
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07
c0 34 (10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00
00 00 (00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4
bytes total
151
Array Length
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00
(00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00
(00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07 c0 34
(10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00 00 00
(00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00 00 00
(00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap)
N/A
24 8 byte [B.<elements> N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4 bytes
total
152
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00
(00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00
(00000000 00000000 00000000 00000000) (0)
8 4 (object header) a8 07 c0 34
(10101000 00000111 11000000 00110100) (885000104)
12 4 (object header) 02 00 00 00
(00000010 00000000 00000000 00000000) (2)
16 4 (object header) 08 00 00 00
(00001000 00000000 00000000 00000000) (8)
20 4 (alignment/padding gap) N/A
24 8 byte [B.<elements>
N/A
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external = 4 bytes
total
153
154
Java Object Layout Samples -
Compressed
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
155
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
156
Mark Word
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
157
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
158
Klass
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
159
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION
VALUE
0 4 (object header) 01
00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00
00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5
00 00 f8 (11110101 00000000 00000000 11111000)
(-134217483)
12 4 (object header) 08
00 00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements> N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
160
Array Length
©2017 CodeKaram
JOL: 8 Byte Array
[B object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00
00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00
00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) f5 00
00 f8 (11110101 00000000 00000000 11111000) (-134217483)
12 4 (object header) 08 00
00 00 (00001000 00000000 00000000 00000000) (8)
16 8 byte [B.<elements>
N/A
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0
bytes total
161
162
Java Object Layout Header
Comparison
©2017 CodeKaram
Compressed vs
Uncompressed
Compressed:
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes
external = 0 bytes total
vs
Uncompressed:
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes
external = 4 bytes total
163
©2017 CodeKaram
Compressed vs
Uncompressed
Compressed:
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external
= 0 bytes total
vs
Uncompressed:
Instance size: 32 bytes
Space losses: 4 bytes internal + 0 bytes external
= 4 bytes total
164
©2017 CodeKaram
Compressed OOPs and
Compressed Class Pointers
165
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit
shift.
166
Java Object Layout Samples -
UnCompressed
©2017 CodeKaram
JOL: Class
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 16 (object header) N/A
16 8 Constructor Class.cachedConstructor N/A
24 8 Class Class.newInstanceCallerCache N/A
32 8 String Class.name N/A
40 8 Module Class.module N/A
48 8 (alignment/padding gap) N/A
56 8 String Class.packageName N/A
64 8 Class Class.componentType N/A
72 8 SoftReference Class.reflectionData N/A
80 8 ClassRepository Class.genericInfo N/A
88 8 Object[] Class.enumConstants N/A
96 8 Map Class.enumConstantDirectory N/A
104 8 AnnotationData Class.annotationData N/A
112 8 AnnotationType Class.annotationType N/A
120 8 ClassValueMap Class.classValueMap N/A
128 32 (alignment/padding gap) N/A
160 4 int Class.classRedefinedCount N/A
164 4 (loss due to the next object alignment)
Instance size: 168 bytes
Space losses: 40 bytes internal + 4 bytes external = 44 bytes total
167
©2017 CodeKaram
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 16 (object header) N/A
16 8 Constructor Class.cachedConstructor N/A
24 8 Class Class.newInstanceCallerCache N/A
32 8 String Class.name N/A
40 8 Module Class.module N/A
48 8 (alignment/padding gap) N/A
56 8 String Class.packageName N/A
64 8 Class Class.componentType N/A
72 8 SoftReference Class.reflectionData N/A
80 8 ClassRepository Class.genericInfo N/A
88 8 Object[] Class.enumConstants N/A
96 8 Map Class.enumConstantDirectory N/A
104 8 AnnotationData Class.annotationData N/A
112 8 AnnotationType Class.annotationType N/A
120 8 ClassValueMap Class.classValueMap N/A
128 32 (alignment/padding gap) N/A
160 4 int Class.classRedefinedCount N/A
164 4 (loss due to the next object alignment)
Instance size: 168 bytes
Space losses: 40 bytes internal + 4 bytes external = 44 bytes total
168
JOL: Class
©2017 CodeKaram
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 16 (object header) N/A
16 8 Constructor Class.cachedConstructor N/A
24 8 Class Class.newInstanceCallerCache N/A
32 8 String Class.name N/A
40 8 Module Class.module N/A
48 8 (alignment/padding gap) N/A
56 8 String Class.packageName N/A
64 8 Class Class.componentType N/A
72 8 SoftReference Class.reflectionData N/A
80 8 ClassRepository Class.genericInfo N/A
88 8 Object[] Class.enumConstants N/A
96 8 Map Class.enumConstantDirectory N/A
104 8 AnnotationData Class.annotationData N/A
112 8 AnnotationType Class.annotationType N/A
120 8 ClassValueMap Class.classValueMap N/A
128 32 (alignment/padding gap) N/A
160 4 int Class.classRedefinedCount N/A
164 4 (loss due to the next object alignment)
Instance size: 168 bytes
Space losses: 40 bytes internal + 4 bytes external = 44 bytes total
169
JOL: Class
170
Java Object Layout Samples -
Compressed
©2017 CodeKaram
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 Constructor Class.cachedConstructor N/A
16 4 Class Class.newInstanceCallerCache N/A
20 4 String Class.name N/A
24 4 Module Class.module N/A
28 4 (alignment/padding gap) N/A
32 4 String Class.packageName N/A
36 4 Class Class.componentType N/A
40 4 SoftReference Class.reflectionData N/A
44 4 ClassRepository Class.genericInfo N/A
48 4 Object[] Class.enumConstants N/A
52 4 Map Class.enumConstantDirectory N/A
56 4 AnnotationData Class.annotationData N/A
60 4 AnnotationType Class.annotationType N/A
64 4 ClassValueMap Class.classValueMap N/A
68 28 (alignment/padding gap) N/A
96 4 int Class.classRedefinedCount N/A
100 4 (loss due to the next object alignment)
171
JOL: Class
©2017 CodeKaram
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 Constructor Class.cachedConstructor N/A
16 4 Class Class.newInstanceCallerCache N/A
20 4 String Class.name N/A
24 4 Module Class.module N/A
28 4 (alignment/padding gap) N/A
32 4 String Class.packageName N/A
36 4 Class Class.componentType N/A
40 4 SoftReference Class.reflectionData N/A
44 4 ClassRepository Class.genericInfo N/A
48 4 Object[] Class.enumConstants N/A
52 4 Map Class.enumConstantDirectory N/A
56 4 AnnotationData Class.annotationData N/A
60 4 AnnotationType Class.annotationType N/A
64 4 ClassValueMap Class.classValueMap N/A
68 28 (alignment/padding gap) N/A
96 4 int Class.classRedefinedCount N/A
100 4 (loss due to the next object alignment)
172
JOL: Class
©2017 CodeKaram
java.lang.Class object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 Constructor Class.cachedConstructor N/A
16 4 Class Class.newInstanceCallerCache N/A
20 4 String Class.name N/A
24 4 Module Class.module N/A
28 4 (alignment/padding gap) N/A
32 4 String Class.packageName N/A
36 4 Class Class.componentType N/A
40 4 SoftReference Class.reflectionData N/A
44 4 ClassRepository Class.genericInfo N/A
48 4 Object[] Class.enumConstants N/A
52 4 Map Class.enumConstantDirectory N/A
56 4 AnnotationData Class.annotationData N/A
60 4 AnnotationType Class.annotationType N/A
64 4 ClassValueMap Class.classValueMap N/A
68 28 (alignment/padding gap) N/A
96 4 int Class.classRedefinedCount N/A
100 4 (loss due to the next object alignment)
173
JOL: Class
©2017 CodeKaram
Compressed OOPs and
Compressed Class Pointers
174
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit
shift.
P
P

More Related Content

What's hot

Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Monica Beckwith
 
Java Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideJava Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideMonica Beckwith
 
JFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceJFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceMonica Beckwith
 
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSOPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSMonica Beckwith
 
Java Garbage Collectors – Moving to Java7 Garbage First (G1) Collector
Java Garbage Collectors – Moving to Java7 Garbage First (G1) CollectorJava Garbage Collectors – Moving to Java7 Garbage First (G1) Collector
Java Garbage Collectors – Moving to Java7 Garbage First (G1) CollectorGurpreet Sachdeva
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and CassandraChris Lohfink
 
G1 Garbage Collector - Big Heaps and Low Pauses?
G1 Garbage Collector - Big Heaps and Low Pauses?G1 Garbage Collector - Big Heaps and Low Pauses?
G1 Garbage Collector - Big Heaps and Low Pauses?C2B2 Consulting
 
Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Monica Beckwith
 
Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.J On The Beach
 
Hadoop world g1_gc_forh_base_v4
Hadoop world g1_gc_forh_base_v4Hadoop world g1_gc_forh_base_v4
Hadoop world g1_gc_forh_base_v4YanpingWang
 
Storing Cassandra Metrics
Storing Cassandra MetricsStoring Cassandra Metrics
Storing Cassandra MetricsChris Lohfink
 
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 PresentationGC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 PresentationLudovic Poitou
 
Tuning Java for Big Data
Tuning Java for Big DataTuning Java for Big Data
Tuning Java for Big DataScott Seighman
 
JVM memory management & Diagnostics
JVM memory management & DiagnosticsJVM memory management & Diagnostics
JVM memory management & DiagnosticsDhaval Shah
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterEverything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterAttila Szegedi
 

What's hot (20)

Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
 
Java Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideJava Performance Engineer's Survival Guide
Java Performance Engineer's Survival Guide
 
JFokus Java 9 contended locking performance
JFokus Java 9 contended locking performanceJFokus Java 9 contended locking performance
JFokus Java 9 contended locking performance
 
-XX:+UseG1GC
-XX:+UseG1GC-XX:+UseG1GC
-XX:+UseG1GC
 
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORSOPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS
 
Java Garbage Collectors – Moving to Java7 Garbage First (G1) Collector
Java Garbage Collectors – Moving to Java7 Garbage First (G1) CollectorJava Garbage Collectors – Moving to Java7 Garbage First (G1) Collector
Java Garbage Collectors – Moving to Java7 Garbage First (G1) Collector
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and Cassandra
 
G1 Garbage Collector - Big Heaps and Low Pauses?
G1 Garbage Collector - Big Heaps and Low Pauses?G1 Garbage Collector - Big Heaps and Low Pauses?
G1 Garbage Collector - Big Heaps and Low Pauses?
 
Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!Java 9: The (G1) GC Awakens!
Java 9: The (G1) GC Awakens!
 
G1GC
G1GCG1GC
G1GC
 
Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.
 
Hadoop world g1_gc_forh_base_v4
Hadoop world g1_gc_forh_base_v4Hadoop world g1_gc_forh_base_v4
Hadoop world g1_gc_forh_base_v4
 
Storing Cassandra Metrics
Storing Cassandra MetricsStoring Cassandra Metrics
Storing Cassandra Metrics
 
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 PresentationGC Tuning in the HotSpot Java VM - a FISL 10 Presentation
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
 
Tuning Java for Big Data
Tuning Java for Big DataTuning Java for Big Data
Tuning Java for Big Data
 
Trouble with memory
Trouble with memoryTrouble with memory
Trouble with memory
 
Tuning the g1gc
Tuning the g1gcTuning the g1gc
Tuning the g1gc
 
Basics of JVM Tuning
Basics of JVM TuningBasics of JVM Tuning
Basics of JVM Tuning
 
JVM memory management & Diagnostics
JVM memory management & DiagnosticsJVM memory management & Diagnostics
JVM memory management & Diagnostics
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterEverything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @Twitter
 

Similar to The Performance Engineer's Guide to Java (HotSpot) Virtual Machine

Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceESUG
 
So You Want To Write Your Own Benchmark
So You Want To Write Your Own BenchmarkSo You Want To Write Your Own Benchmark
So You Want To Write Your Own BenchmarkDror Bereznitsky
 
millions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxmillions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxTier1 app
 
PostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performancePostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performanceVladimir Sitnikov
 
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...Nikolay Matvienko
 
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013Gregg Donovan
 
The Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningThe Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningjClarity
 
Microsoft, Citrix and SCOM: EOL or a New Beginning ?
Microsoft, Citrix and SCOM:  EOL or a New Beginning ?Microsoft, Citrix and SCOM:  EOL or a New Beginning ?
Microsoft, Citrix and SCOM: EOL or a New Beginning ?eG Innovations
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012Jody Garnett
 
From HTML to pixels on the Screen
From HTML to pixels on the ScreenFrom HTML to pixels on the Screen
From HTML to pixels on the ScreenIgor Talic
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, UkraineVladimir Ivanov
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務Mu Chun Wang
 
this-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxthis-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxTier1 app
 
Up and Running with Angular
Up and Running with AngularUp and Running with Angular
Up and Running with AngularJustin James
 
Advanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applicationsAdvanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applicationsRogue Wave Software
 
AsHES-talk_Final_handouts
AsHES-talk_Final_handoutsAsHES-talk_Final_handouts
AsHES-talk_Final_handoutsMitesh Meswani
 

Similar to The Performance Engineer's Guide to Java (HotSpot) Virtual Machine (20)

Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
 
Spring insight what just happened
Spring insight   what just happenedSpring insight   what just happened
Spring insight what just happened
 
So You Want To Write Your Own Benchmark
So You Want To Write Your Own BenchmarkSo You Want To Write Your Own Benchmark
So You Want To Write Your Own Benchmark
 
Living with garbage
Living with garbageLiving with garbage
Living with garbage
 
millions-gc-jax-2022.pptx
millions-gc-jax-2022.pptxmillions-gc-jax-2022.pptx
millions-gc-jax-2022.pptx
 
PostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performancePostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performance
 
Living With Garbage
Living With GarbageLiving With Garbage
Living With Garbage
 
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...
Nodeconf AR 18 Decomposition of the Main thread in Node.js to increase throug...
 
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013
Living with Garbage by Gregg Donovan at LuceneSolr Revolution 2013
 
The Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance TuningThe Diabolical Developers Guide to Performance Tuning
The Diabolical Developers Guide to Performance Tuning
 
Microsoft, Citrix and SCOM: EOL or a New Beginning ?
Microsoft, Citrix and SCOM:  EOL or a New Beginning ?Microsoft, Citrix and SCOM:  EOL or a New Beginning ?
Microsoft, Citrix and SCOM: EOL or a New Beginning ?
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012
 
From HTML to pixels on the Screen
From HTML to pixels on the ScreenFrom HTML to pixels on the Screen
From HTML to pixels on the Screen
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
JBoss World 2010
JBoss World 2010JBoss World 2010
JBoss World 2010
 
this-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptxthis-is-garbage-talk-2022.pptx
this-is-garbage-talk-2022.pptx
 
Up and Running with Angular
Up and Running with AngularUp and Running with Angular
Up and Running with Angular
 
Advanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applicationsAdvanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applications
 
AsHES-talk_Final_handouts
AsHES-talk_Final_handoutsAsHES-talk_Final_handouts
AsHES-talk_Final_handouts
 

More from Monica Beckwith

The ilities of software engineering.pptx
The ilities of software engineering.pptxThe ilities of software engineering.pptx
The ilities of software engineering.pptxMonica Beckwith
 
Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Monica Beckwith
 
Applying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBApplying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBMonica Beckwith
 
Intro to Garbage Collection
Intro to Garbage CollectionIntro to Garbage Collection
Intro to Garbage CollectionMonica Beckwith
 
OpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsOpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsMonica Beckwith
 

More from Monica Beckwith (8)

The ilities of software engineering.pptx
The ilities of software engineering.pptxThe ilities of software engineering.pptx
The ilities of software engineering.pptx
 
A G1GC Saga-KCJUG.pptx
A G1GC Saga-KCJUG.pptxA G1GC Saga-KCJUG.pptx
A G1GC Saga-KCJUG.pptx
 
ZGC-SnowOne.pdf
ZGC-SnowOne.pdfZGC-SnowOne.pdf
ZGC-SnowOne.pdf
 
QCon London.pdf
QCon London.pdfQCon London.pdf
QCon London.pdf
 
Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!Enabling Java: Windows on Arm64 - A Success Story!
Enabling Java: Windows on Arm64 - A Success Story!
 
Applying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBBApplying Concurrency Cookbook Recipes to SPEC JBB
Applying Concurrency Cookbook Recipes to SPEC JBB
 
Intro to Garbage Collection
Intro to Garbage CollectionIntro to Garbage Collection
Intro to Garbage Collection
 
OpenJDK Concurrent Collectors
OpenJDK Concurrent CollectorsOpenJDK Concurrent Collectors
OpenJDK Concurrent Collectors
 

Recently uploaded

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 

The Performance Engineer's Guide to Java (HotSpot) Virtual Machine