SlideShare a Scribd company logo
1 of 23
Download to read offline
ObjectLayout 
(and StructuredArray) 
Closing the [last?] inherent C 
©2014 Azul Systems, Inc. 
vs. Java speed gap 
http://objectlayout.org 
Gil Tene, CTO & co-Founder, Azul Systems 
!
©2014 Azul Systems, Inc. 
ObjectLayout 
Focus: Match the raw speed benefits C based 
languages get from commonly used forms of memory 
layout 
Expose these benefits to normal idiomatic POJO use 
Focus: Speed. For regular Java Objects. On the heap. 
Not looking for: 
Improved footprint 
off-heap solutions 
immutability 
These are all 
orthogonal 
concerns }
ObjectLayout: goal overlap? 
Relationship to Value types: none 
Relationship to Packet Objects (or JNR/FFI): none 
Laser-focused on a different problem 
Does not conflict or contradict concerns that drive 
these other efforts 
Minimal overlap does exist 
… The kind of overlap that ArrayList and HashMap 
have as good alternatives of a bag of objects 
©2014 Azul Systems, Inc.
Value 
types 
Speed! 
For any Object 
ObjectLayout 
Packed 
objects 
& 
JNR/FFI 
On Heap 
precise layout 
control 
Off Heap 
Sharing data 
Immutable 
Return values 
On-stack 
Objects 
usable by 
all existing 
On Heap 
New code code 
Array of 
small-footprint 
values 
New code
©2014 Azul Systems, Inc. 
ObjectLayout Origin 
ObjectLayout/StructuredArray started with a simple 
argument. The common sides of the argument are: 
“We need structs in Java…”: Look at all the unsafe 
direct access stuff we do using flyweights over buffers 
or byte arrays, just to squeeze out speed that C gets 
trivially… 
“We already have structs. They are called Objects.”: 
What we need is competitively speedy access for the 
data collection semantics that are currently faster in C 
It’s all about capturing “enabling semantic limitations”
©2014 Azul Systems, Inc. 
speed comes from ??? 
C’s layout speed benefits are dominated by two factors: 
Dead reckoning: 
Data address derived from containing object address 
no data-dependent load operation 
Streaming (In the case of an array of structs): 
sequential access through multiple members 
predictable striding access in memory 
Prefetch logic compensates for miss latency
example of speed-enabling limitations 
Why is Object[] inherently slower than struct foo[]? 
Java: a mutable array of same-base-type objects 
C: An immutable array of exact-same-type structures 
Mutability (of the array itself) & non-uniform member 
size both force de-reference, and both break streaming 
StructuredArray<T>: An immutable array of [potentially] 
mutable exact-same-type (T) objects 
©2014 Azul Systems, Inc. 
Supports Instantiation, get(), but not put()…
ObjectLayout target forms 
Easily identified C-based layout forms: 
array of structs 
©2014 Azul Systems, Inc. 
struct foo[]; 
struct with struct inside 
struct foo { int a; struct bar b; int c; }; 
struct with array at the end 
struct packet { int length; char[] body; } 
None are currently (speed) matched in Java
ObjectLayout: starting point 
Capture the semantics that enable speed in the various 
C-like data layout forms behaviors 
Theory: we can do this all with no language change… 
Capture the needed semantics in “vanilla” Java classes 
(targeting e.g. Java SE 6) 
Have JDKs recognize and intrinsify behavior, optimizing 
memory layout and access operations 
“Vanilla” and “Intrinsified” implementation behavior 
should be indistinguishable (except for speed) 
©2014 Azul Systems, Inc.
Modeled after java.util.concurrent 
Captured semantics enabled fast concurrent operations 
No language changes. No required JVM changes. 
Implementable in “vanilla” Java classes outside of JDK 
e.g. AtomicLong CAS could be done with synchronized 
JDKs improved to recognize and intrinsify behavior 
e.g. AtomicLong CAS is a single x86 instruction 
Moved into JDK and Java name space in order to secure 
intrinsification and gain legitimate access to unsafe 
©2014 Azul Systems, Inc.
ObjectLayout: StructuredArray 
array of structs 
©2014 Azul Systems, Inc. 
struct foo[]; 
struct with struct inside 
struct foo { int a; struct bar b; int c; }; 
struct with array at the end 
struct packet { int len; char[] body; }
©2014 Azul Systems, Inc. 
StructuredArray<T> 
A collection of object instances of arbitrary type T 
Arranged as array: T element = get(index); 
Collection is immutable: cannot replace elements 
Instantiated via factory method: 
a = StructuredArray.newInstance(SomeClass.class, 100); 
All elements constructed at instantiation time 
Supports arbitrary constructor and args for members 
Including support for index-specific CtorAndArgs
StructuredArray<T> liveness 
We considered an “inner pointer keeps container alive” 
approach, because that what other runtimes seem to do 
with arrays of structs and field references 
But then we realized: real objects have real liveness 
A StructuredArray is just a regular idiomatic collection 
The collection keeps it’s members alive 
Collection members don’t (implicitly) keep it alive 
*** Under the hood, optimized implementations will want 
to keep the collection “together” as long as it is alive 
©2014 Azul Systems, Inc.
Benefits of liveness approach 
StructuredArray is just a collection of objects 
No special behavior: acts like any other collection 
Happens to be fast on JDKs that optimize it 
Elements of a StructuredArray are regular objects 
Can participate in other collections and object graphs 
Can be locked 
Can have an identity hashcode 
Can be passed along to any existing java code 
It’s “natural”, and it’s easier to support in the JVM 
©2014 Azul Systems, Inc.
StructuredArray<T> continued… 
Indexes are longs (it’s 2014…) 
Multi dimensional support 
Non-leaf Elements are themselves StructuredArrays 
StructuredArray is subclassable 
Supports some useful coding styles and optimizations 
StructuredArray is not constructable 
must be created with factory methods 
(*** Did you spot that small contradiction?) 
©2014 Azul Systems, Inc.
Optimized JDK implementation 
A new heap concept: “contained” and “container” objects 
Contained and container objects are regular objects 
Given a contained object, there is a means of finding 
the immediately containing object 
If GC needs to move an object that is contained in a 
live container object, it will move the entire container 
Very simple to implement in all current OpenJDK GC 
mechanisms (and in Zing’s C4, and in others, we think) 
More details in workshop… 
©2014 Azul Systems, Inc.
Optimized JDK implementation 
Streaming benefits come directly from layout 
No compiler optimizations needed 
Dead-reckoning benefits require some compiler support 
no dereferencing, but…. 
e = (T) ( a + a.bodySize + (index * a.elementSize) ); 
elementSize and bodySize are not constant 
But optimizations similar to CHA & inline-cache apply 
More details in workshop… 
©2014 Azul Systems, Inc.
©2014 Azul Systems, Inc. 
ObjectLayout forms 2 & 3 
array of structs 
struct foo[]; 
struct with struct inside 
struct foo { int a; struct bar b; int c; }; 
struct with array at the end 
struct packet { int len; char[] body; }
©2014 Azul Systems, Inc. 
“struct in struct”: 
intrinsic objects 
Object instance x is intrinsic to object instance y 
Proposal: factory based instantiation of final member 
objects 
Class SomeClass { 
int a; 
final SomeOtherClass o = 
IntrinsifiedObjects.createIntrinsicObject(SomeOtherClass.class); 
} 
Intrinsic object can be laid out within containing object 
Must deal with & survive reflection based overwrites
“struct with array at the end”: 
©2014 Azul Systems, Inc. 
subclassable arrays 
Semantics well captured by subclassable arrays classes 
ObjectLayout describes one for each primitive type. E.g. 
PrimitiveLongArray, PrimitiveDoubleArray, etc… 
Also ReferenceArray<T> 
StructuredArray<T> is also subclassable, and captures 
“struct with array of structs at the end”
©2014 Azul Systems, Inc. 
Status 
Vanilla Java code on github. Public domain under CC0. 
See http://objectlayout.org 
StructuredArray is fairly mature semantically. Other 
two forms (intrinsic objects and subclassable arrays) 
are getting there… 
Intrinsified implementations coming over the next few 
months for both Zing and OpenJDK 
Next steps: OpenJDK project with working code, JEP… 
Aim: Add ObjectLayout to Java SE (9?) 
Vanilla implementation will work on all JDKs
©2014 Azul Systems, Inc. 
ObjectLayout Summary 
New Java classes: org.ObjectLayout.* 
Propose to move into java namespace in Java SE (9?) 
Work “out of the box” on Java 6, 7, 8, 9, … 
No syntax changes, No new bytecodes 
No new required JVM behavior 
Can “go fast” on JDKs that optimize for them 
Relatively simple, isolated JVM changes needed 
Proposing to include “go fast” in OpenJDK (9?) 
Zing will support “go fast” for Java 6, 7, 8, 9, …
Q & A 
@giltene 
http://www.azulsystems.com 
! 
http://objectlayout.org 
https://github.com/ObjectLayout/ObjectLayout

More Related Content

What's hot

Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsSerge Stinckwich
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java WorkshopSimon Ritter
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningCarol McDonald
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafeSunghyouk Bae
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-finalMarcus Lagergren
 
Java New Evolution
Java New EvolutionJava New Evolution
Java New EvolutionAllan Huang
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9Simon Ritter
 
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...Sachintha Gunasena
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itAlexey Fyodorov
 
Javascript internals
Javascript internalsJavascript internals
Javascript internalsNir Noy
 
Asynchronous Programming in Android
Asynchronous Programming in AndroidAsynchronous Programming in Android
Asynchronous Programming in AndroidJohn Pendexter
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play frameworkFelipe
 

What's hot (20)

Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Efficient Android Threading
Efficient Android ThreadingEfficient Android Threading
Efficient Android Threading
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java Workshop
 
Java performance tuning
Java performance tuningJava performance tuning
Java performance tuning
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
HotSpotコトハジメ
HotSpotコトハジメHotSpotコトハジメ
HotSpotコトハジメ
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafe
 
Epoxy 介紹
Epoxy 介紹Epoxy 介紹
Epoxy 介紹
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Aop clustering
Aop clusteringAop clustering
Aop clustering
 
Lagergren jvmls-2013-final
Lagergren jvmls-2013-finalLagergren jvmls-2013-final
Lagergren jvmls-2013-final
 
Java New Evolution
Java New EvolutionJava New Evolution
Java New Evolution
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9
 
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
Concurrency Programming in Java - 07 - High-level Concurrency objects, Lock O...
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need it
 
Vert.x vs akka
Vert.x vs akkaVert.x vs akka
Vert.x vs akka
 
Javascript internals
Javascript internalsJavascript internals
Javascript internals
 
The Java memory model made easy
The Java memory model made easyThe Java memory model made easy
The Java memory model made easy
 
Asynchronous Programming in Android
Asynchronous Programming in AndroidAsynchronous Programming in Android
Asynchronous Programming in Android
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 

Viewers also liked

What's New in the JVM in Java 8?
What's New in the JVM in Java 8?What's New in the JVM in Java 8?
What's New in the JVM in Java 8?Azul Systems Inc.
 
DotCMS Bootcamp: Enabling Java in Latency Sensitivie Environments
DotCMS Bootcamp: Enabling Java in Latency Sensitivie EnvironmentsDotCMS Bootcamp: Enabling Java in Latency Sensitivie Environments
DotCMS Bootcamp: Enabling Java in Latency Sensitivie EnvironmentsAzul Systems Inc.
 
Zulu Embedded Java Introduction
Zulu Embedded Java IntroductionZulu Embedded Java Introduction
Zulu Embedded Java IntroductionAzul Systems Inc.
 
Webinar: Zing Vision: Answering your toughest production Java performance que...
Webinar: Zing Vision: Answering your toughest production Java performance que...Webinar: Zing Vision: Answering your toughest production Java performance que...
Webinar: Zing Vision: Answering your toughest production Java performance que...Azul Systems Inc.
 
How NOT to Write a Microbenchmark
How NOT to Write a MicrobenchmarkHow NOT to Write a Microbenchmark
How NOT to Write a MicrobenchmarkAzul Systems Inc.
 
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)Speculative Locking: Breaking the Scale Barrier (JAOO 2005)
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)Azul Systems Inc.
 
Experiences with Debugging Data Races
Experiences with Debugging Data RacesExperiences with Debugging Data Races
Experiences with Debugging Data RacesAzul Systems Inc.
 
The Java Evolution Mismatch - Why You Need a Better JVM
The Java Evolution Mismatch - Why You Need a Better JVMThe Java Evolution Mismatch - Why You Need a Better JVM
The Java Evolution Mismatch - Why You Need a Better JVMAzul Systems Inc.
 
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!Azul Systems Inc.
 
Lock-Free, Wait-Free Hash Table
Lock-Free, Wait-Free Hash TableLock-Free, Wait-Free Hash Table
Lock-Free, Wait-Free Hash TableAzul Systems Inc.
 

Viewers also liked (13)

What's New in the JVM in Java 8?
What's New in the JVM in Java 8?What's New in the JVM in Java 8?
What's New in the JVM in Java 8?
 
DotCMS Bootcamp: Enabling Java in Latency Sensitivie Environments
DotCMS Bootcamp: Enabling Java in Latency Sensitivie EnvironmentsDotCMS Bootcamp: Enabling Java in Latency Sensitivie Environments
DotCMS Bootcamp: Enabling Java in Latency Sensitivie Environments
 
Zulu Embedded Java Introduction
Zulu Embedded Java IntroductionZulu Embedded Java Introduction
Zulu Embedded Java Introduction
 
Webinar: Zing Vision: Answering your toughest production Java performance que...
Webinar: Zing Vision: Answering your toughest production Java performance que...Webinar: Zing Vision: Answering your toughest production Java performance que...
Webinar: Zing Vision: Answering your toughest production Java performance que...
 
How NOT to Write a Microbenchmark
How NOT to Write a MicrobenchmarkHow NOT to Write a Microbenchmark
How NOT to Write a Microbenchmark
 
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)Speculative Locking: Breaking the Scale Barrier (JAOO 2005)
Speculative Locking: Breaking the Scale Barrier (JAOO 2005)
 
Experiences with Debugging Data Races
Experiences with Debugging Data RacesExperiences with Debugging Data Races
Experiences with Debugging Data Races
 
The Java Evolution Mismatch - Why You Need a Better JVM
The Java Evolution Mismatch - Why You Need a Better JVMThe Java Evolution Mismatch - Why You Need a Better JVM
The Java Evolution Mismatch - Why You Need a Better JVM
 
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!
Start Fast and Stay Fast - Priming Java for Market Open with ReadyNow!
 
Lock-Free, Wait-Free Hash Table
Lock-Free, Wait-Free Hash TableLock-Free, Wait-Free Hash Table
Lock-Free, Wait-Free Hash Table
 
What's Inside a JVM?
What's Inside a JVM?What's Inside a JVM?
What's Inside a JVM?
 
Java vs. C/C++
Java vs. C/C++Java vs. C/C++
Java vs. C/C++
 
C++vs java
C++vs javaC++vs java
C++vs java
 

Similar to ObjectLayout: Closing the (last?) inherent C vs. Java speed gap

JVM Language Summit: Object layout presentation
JVM Language Summit: Object layout presentationJVM Language Summit: Object layout presentation
JVM Language Summit: Object layout presentationAzul Systems, Inc.
 
JVM Language Summit: Object layout workshop
JVM Language Summit: Object layout workshopJVM Language Summit: Object layout workshop
JVM Language Summit: Object layout workshopAzul Systems, Inc.
 
iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)Netcetera
 
How to train the jdt dragon
How to train the jdt dragonHow to train the jdt dragon
How to train the jdt dragonAyushman Jain
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesBalamuruganV28
 
Topic2JavaBasics.ppt
Topic2JavaBasics.pptTopic2JavaBasics.ppt
Topic2JavaBasics.pptMENACE4
 
hallleuah_java.ppt
hallleuah_java.ppthallleuah_java.ppt
hallleuah_java.pptRahul201258
 
Object-Oriented Programming in Java.pdf
Object-Oriented Programming in Java.pdfObject-Oriented Programming in Java.pdf
Object-Oriented Programming in Java.pdfBharath Choudhary
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternNishith Shukla
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsLalit Kale
 
Qb it1301
Qb   it1301Qb   it1301
Qb it1301ArthyR3
 
Optimizing Application Architecture (.NET/Java topics)
Optimizing Application Architecture (.NET/Java topics)Optimizing Application Architecture (.NET/Java topics)
Optimizing Application Architecture (.NET/Java topics)Ravi Okade
 
java framwork for HIBERNATE FRAMEWORK.pptx
java framwork for HIBERNATE FRAMEWORK.pptxjava framwork for HIBERNATE FRAMEWORK.pptx
java framwork for HIBERNATE FRAMEWORK.pptxramanujsaini2001
 

Similar to ObjectLayout: Closing the (last?) inherent C vs. Java speed gap (20)

JVM Language Summit: Object layout presentation
JVM Language Summit: Object layout presentationJVM Language Summit: Object layout presentation
JVM Language Summit: Object layout presentation
 
JVM Language Summit: Object layout workshop
JVM Language Summit: Object layout workshopJVM Language Summit: Object layout workshop
JVM Language Summit: Object layout workshop
 
Hibernate
HibernateHibernate
Hibernate
 
Hibernate3 q&a
Hibernate3 q&aHibernate3 q&a
Hibernate3 q&a
 
iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)
 
How to train the jdt dragon
How to train the jdt dragonHow to train the jdt dragon
How to train the jdt dragon
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit Notes
 
Topic2JavaBasics.ppt
Topic2JavaBasics.pptTopic2JavaBasics.ppt
Topic2JavaBasics.ppt
 
hallleuah_java.ppt
hallleuah_java.ppthallleuah_java.ppt
hallleuah_java.ppt
 
2.ppt
2.ppt2.ppt
2.ppt
 
Object-Oriented Programming in Java.pdf
Object-Oriented Programming in Java.pdfObject-Oriented Programming in Java.pdf
Object-Oriented Programming in Java.pdf
 
JAVA BASICS
JAVA BASICSJAVA BASICS
JAVA BASICS
 
Core_Java_Interview.pdf
Core_Java_Interview.pdfCore_Java_Interview.pdf
Core_Java_Interview.pdf
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design Patterns
 
Qb it1301
Qb   it1301Qb   it1301
Qb it1301
 
Optimizing Application Architecture (.NET/Java topics)
Optimizing Application Architecture (.NET/Java topics)Optimizing Application Architecture (.NET/Java topics)
Optimizing Application Architecture (.NET/Java topics)
 
java framwork for HIBERNATE FRAMEWORK.pptx
java framwork for HIBERNATE FRAMEWORK.pptxjava framwork for HIBERNATE FRAMEWORK.pptx
java framwork for HIBERNATE FRAMEWORK.pptx
 
Java mcq
Java mcqJava mcq
Java mcq
 
Hibernate 3
Hibernate 3Hibernate 3
Hibernate 3
 

More from Azul Systems Inc.

Advancements ingc andc4overview_linkedin_oct2017
Advancements ingc andc4overview_linkedin_oct2017Advancements ingc andc4overview_linkedin_oct2017
Advancements ingc andc4overview_linkedin_oct2017Azul Systems Inc.
 
Understanding GC, JavaOne 2017
Understanding GC, JavaOne 2017Understanding GC, JavaOne 2017
Understanding GC, JavaOne 2017Azul Systems Inc.
 
Azul Systems open source guide
Azul Systems open source guideAzul Systems open source guide
Azul Systems open source guideAzul Systems Inc.
 
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and Tools
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and ToolsIntelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and Tools
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and ToolsAzul Systems Inc.
 
Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage CollectionAzul Systems Inc.
 
The evolution of OpenJDK: From Java's beginnings to 2014
The evolution of OpenJDK: From Java's beginnings to 2014The evolution of OpenJDK: From Java's beginnings to 2014
The evolution of OpenJDK: From Java's beginnings to 2014Azul Systems Inc.
 
Push Technology's latest data distribution benchmark with Solarflare and Zing
Push Technology's latest data distribution benchmark with Solarflare and ZingPush Technology's latest data distribution benchmark with Solarflare and Zing
Push Technology's latest data distribution benchmark with Solarflare and ZingAzul Systems Inc.
 
The Art of Java Benchmarking
The Art of Java BenchmarkingThe Art of Java Benchmarking
The Art of Java BenchmarkingAzul Systems Inc.
 
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, Poland
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, PolandAzul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, Poland
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, PolandAzul Systems Inc.
 
Understanding Application Hiccups - and What You Can Do About Them
Understanding Application Hiccups - and What You Can Do About ThemUnderstanding Application Hiccups - and What You Can Do About Them
Understanding Application Hiccups - and What You Can Do About ThemAzul Systems Inc.
 
JVM Memory Management Details
JVM Memory Management DetailsJVM Memory Management Details
JVM Memory Management DetailsAzul Systems Inc.
 
JVM Mechanics: A Peek Under the Hood
JVM Mechanics: A Peek Under the HoodJVM Mechanics: A Peek Under the Hood
JVM Mechanics: A Peek Under the HoodAzul Systems Inc.
 
Enterprise Search Summit - Speeding Up Search
Enterprise Search Summit - Speeding Up SearchEnterprise Search Summit - Speeding Up Search
Enterprise Search Summit - Speeding Up SearchAzul Systems Inc.
 
Understanding Java Garbage Collection - And What You Can Do About It
Understanding Java Garbage Collection - And What You Can Do About ItUnderstanding Java Garbage Collection - And What You Can Do About It
Understanding Java Garbage Collection - And What You Can Do About ItAzul Systems Inc.
 
Enabling Java in Latency-Sensitive Applications
Enabling Java in Latency-Sensitive ApplicationsEnabling Java in Latency-Sensitive Applications
Enabling Java in Latency-Sensitive ApplicationsAzul Systems Inc.
 
Java at Scale, Dallas JUG, October 2013
Java at Scale, Dallas JUG, October 2013Java at Scale, Dallas JUG, October 2013
Java at Scale, Dallas JUG, October 2013Azul Systems Inc.
 

More from Azul Systems Inc. (16)

Advancements ingc andc4overview_linkedin_oct2017
Advancements ingc andc4overview_linkedin_oct2017Advancements ingc andc4overview_linkedin_oct2017
Advancements ingc andc4overview_linkedin_oct2017
 
Understanding GC, JavaOne 2017
Understanding GC, JavaOne 2017Understanding GC, JavaOne 2017
Understanding GC, JavaOne 2017
 
Azul Systems open source guide
Azul Systems open source guideAzul Systems open source guide
Azul Systems open source guide
 
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and Tools
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and ToolsIntelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and Tools
Intelligent Trading Summit NY 2014: Understanding Latency: Key Lessons and Tools
 
Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage Collection
 
The evolution of OpenJDK: From Java's beginnings to 2014
The evolution of OpenJDK: From Java's beginnings to 2014The evolution of OpenJDK: From Java's beginnings to 2014
The evolution of OpenJDK: From Java's beginnings to 2014
 
Push Technology's latest data distribution benchmark with Solarflare and Zing
Push Technology's latest data distribution benchmark with Solarflare and ZingPush Technology's latest data distribution benchmark with Solarflare and Zing
Push Technology's latest data distribution benchmark with Solarflare and Zing
 
The Art of Java Benchmarking
The Art of Java BenchmarkingThe Art of Java Benchmarking
The Art of Java Benchmarking
 
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, Poland
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, PolandAzul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, Poland
Azul Zulu on Azure Overview -- OpenTech CEE Workshop, Warsaw, Poland
 
Understanding Application Hiccups - and What You Can Do About Them
Understanding Application Hiccups - and What You Can Do About ThemUnderstanding Application Hiccups - and What You Can Do About Them
Understanding Application Hiccups - and What You Can Do About Them
 
JVM Memory Management Details
JVM Memory Management DetailsJVM Memory Management Details
JVM Memory Management Details
 
JVM Mechanics: A Peek Under the Hood
JVM Mechanics: A Peek Under the HoodJVM Mechanics: A Peek Under the Hood
JVM Mechanics: A Peek Under the Hood
 
Enterprise Search Summit - Speeding Up Search
Enterprise Search Summit - Speeding Up SearchEnterprise Search Summit - Speeding Up Search
Enterprise Search Summit - Speeding Up Search
 
Understanding Java Garbage Collection - And What You Can Do About It
Understanding Java Garbage Collection - And What You Can Do About ItUnderstanding Java Garbage Collection - And What You Can Do About It
Understanding Java Garbage Collection - And What You Can Do About It
 
Enabling Java in Latency-Sensitive Applications
Enabling Java in Latency-Sensitive ApplicationsEnabling Java in Latency-Sensitive Applications
Enabling Java in Latency-Sensitive Applications
 
Java at Scale, Dallas JUG, October 2013
Java at Scale, Dallas JUG, October 2013Java at Scale, Dallas JUG, October 2013
Java at Scale, Dallas JUG, October 2013
 

Recently uploaded

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

ObjectLayout: Closing the (last?) inherent C vs. Java speed gap

  • 1. ObjectLayout (and StructuredArray) Closing the [last?] inherent C ©2014 Azul Systems, Inc. vs. Java speed gap http://objectlayout.org Gil Tene, CTO & co-Founder, Azul Systems !
  • 2. ©2014 Azul Systems, Inc. ObjectLayout Focus: Match the raw speed benefits C based languages get from commonly used forms of memory layout Expose these benefits to normal idiomatic POJO use Focus: Speed. For regular Java Objects. On the heap. Not looking for: Improved footprint off-heap solutions immutability These are all orthogonal concerns }
  • 3. ObjectLayout: goal overlap? Relationship to Value types: none Relationship to Packet Objects (or JNR/FFI): none Laser-focused on a different problem Does not conflict or contradict concerns that drive these other efforts Minimal overlap does exist … The kind of overlap that ArrayList and HashMap have as good alternatives of a bag of objects ©2014 Azul Systems, Inc.
  • 4. Value types Speed! For any Object ObjectLayout Packed objects & JNR/FFI On Heap precise layout control Off Heap Sharing data Immutable Return values On-stack Objects usable by all existing On Heap New code code Array of small-footprint values New code
  • 5. ©2014 Azul Systems, Inc. ObjectLayout Origin ObjectLayout/StructuredArray started with a simple argument. The common sides of the argument are: “We need structs in Java…”: Look at all the unsafe direct access stuff we do using flyweights over buffers or byte arrays, just to squeeze out speed that C gets trivially… “We already have structs. They are called Objects.”: What we need is competitively speedy access for the data collection semantics that are currently faster in C It’s all about capturing “enabling semantic limitations”
  • 6. ©2014 Azul Systems, Inc. speed comes from ??? C’s layout speed benefits are dominated by two factors: Dead reckoning: Data address derived from containing object address no data-dependent load operation Streaming (In the case of an array of structs): sequential access through multiple members predictable striding access in memory Prefetch logic compensates for miss latency
  • 7. example of speed-enabling limitations Why is Object[] inherently slower than struct foo[]? Java: a mutable array of same-base-type objects C: An immutable array of exact-same-type structures Mutability (of the array itself) & non-uniform member size both force de-reference, and both break streaming StructuredArray<T>: An immutable array of [potentially] mutable exact-same-type (T) objects ©2014 Azul Systems, Inc. Supports Instantiation, get(), but not put()…
  • 8. ObjectLayout target forms Easily identified C-based layout forms: array of structs ©2014 Azul Systems, Inc. struct foo[]; struct with struct inside struct foo { int a; struct bar b; int c; }; struct with array at the end struct packet { int length; char[] body; } None are currently (speed) matched in Java
  • 9. ObjectLayout: starting point Capture the semantics that enable speed in the various C-like data layout forms behaviors Theory: we can do this all with no language change… Capture the needed semantics in “vanilla” Java classes (targeting e.g. Java SE 6) Have JDKs recognize and intrinsify behavior, optimizing memory layout and access operations “Vanilla” and “Intrinsified” implementation behavior should be indistinguishable (except for speed) ©2014 Azul Systems, Inc.
  • 10. Modeled after java.util.concurrent Captured semantics enabled fast concurrent operations No language changes. No required JVM changes. Implementable in “vanilla” Java classes outside of JDK e.g. AtomicLong CAS could be done with synchronized JDKs improved to recognize and intrinsify behavior e.g. AtomicLong CAS is a single x86 instruction Moved into JDK and Java name space in order to secure intrinsification and gain legitimate access to unsafe ©2014 Azul Systems, Inc.
  • 11. ObjectLayout: StructuredArray array of structs ©2014 Azul Systems, Inc. struct foo[]; struct with struct inside struct foo { int a; struct bar b; int c; }; struct with array at the end struct packet { int len; char[] body; }
  • 12. ©2014 Azul Systems, Inc. StructuredArray<T> A collection of object instances of arbitrary type T Arranged as array: T element = get(index); Collection is immutable: cannot replace elements Instantiated via factory method: a = StructuredArray.newInstance(SomeClass.class, 100); All elements constructed at instantiation time Supports arbitrary constructor and args for members Including support for index-specific CtorAndArgs
  • 13. StructuredArray<T> liveness We considered an “inner pointer keeps container alive” approach, because that what other runtimes seem to do with arrays of structs and field references But then we realized: real objects have real liveness A StructuredArray is just a regular idiomatic collection The collection keeps it’s members alive Collection members don’t (implicitly) keep it alive *** Under the hood, optimized implementations will want to keep the collection “together” as long as it is alive ©2014 Azul Systems, Inc.
  • 14. Benefits of liveness approach StructuredArray is just a collection of objects No special behavior: acts like any other collection Happens to be fast on JDKs that optimize it Elements of a StructuredArray are regular objects Can participate in other collections and object graphs Can be locked Can have an identity hashcode Can be passed along to any existing java code It’s “natural”, and it’s easier to support in the JVM ©2014 Azul Systems, Inc.
  • 15. StructuredArray<T> continued… Indexes are longs (it’s 2014…) Multi dimensional support Non-leaf Elements are themselves StructuredArrays StructuredArray is subclassable Supports some useful coding styles and optimizations StructuredArray is not constructable must be created with factory methods (*** Did you spot that small contradiction?) ©2014 Azul Systems, Inc.
  • 16. Optimized JDK implementation A new heap concept: “contained” and “container” objects Contained and container objects are regular objects Given a contained object, there is a means of finding the immediately containing object If GC needs to move an object that is contained in a live container object, it will move the entire container Very simple to implement in all current OpenJDK GC mechanisms (and in Zing’s C4, and in others, we think) More details in workshop… ©2014 Azul Systems, Inc.
  • 17. Optimized JDK implementation Streaming benefits come directly from layout No compiler optimizations needed Dead-reckoning benefits require some compiler support no dereferencing, but…. e = (T) ( a + a.bodySize + (index * a.elementSize) ); elementSize and bodySize are not constant But optimizations similar to CHA & inline-cache apply More details in workshop… ©2014 Azul Systems, Inc.
  • 18. ©2014 Azul Systems, Inc. ObjectLayout forms 2 & 3 array of structs struct foo[]; struct with struct inside struct foo { int a; struct bar b; int c; }; struct with array at the end struct packet { int len; char[] body; }
  • 19. ©2014 Azul Systems, Inc. “struct in struct”: intrinsic objects Object instance x is intrinsic to object instance y Proposal: factory based instantiation of final member objects Class SomeClass { int a; final SomeOtherClass o = IntrinsifiedObjects.createIntrinsicObject(SomeOtherClass.class); } Intrinsic object can be laid out within containing object Must deal with & survive reflection based overwrites
  • 20. “struct with array at the end”: ©2014 Azul Systems, Inc. subclassable arrays Semantics well captured by subclassable arrays classes ObjectLayout describes one for each primitive type. E.g. PrimitiveLongArray, PrimitiveDoubleArray, etc… Also ReferenceArray<T> StructuredArray<T> is also subclassable, and captures “struct with array of structs at the end”
  • 21. ©2014 Azul Systems, Inc. Status Vanilla Java code on github. Public domain under CC0. See http://objectlayout.org StructuredArray is fairly mature semantically. Other two forms (intrinsic objects and subclassable arrays) are getting there… Intrinsified implementations coming over the next few months for both Zing and OpenJDK Next steps: OpenJDK project with working code, JEP… Aim: Add ObjectLayout to Java SE (9?) Vanilla implementation will work on all JDKs
  • 22. ©2014 Azul Systems, Inc. ObjectLayout Summary New Java classes: org.ObjectLayout.* Propose to move into java namespace in Java SE (9?) Work “out of the box” on Java 6, 7, 8, 9, … No syntax changes, No new bytecodes No new required JVM behavior Can “go fast” on JDKs that optimize for them Relatively simple, isolated JVM changes needed Proposing to include “go fast” in OpenJDK (9?) Zing will support “go fast” for Java 6, 7, 8, 9, …
  • 23. Q & A @giltene http://www.azulsystems.com ! http://objectlayout.org https://github.com/ObjectLayout/ObjectLayout