+ All Categories
Home > Technology > What your jvm can do for you

What your jvm can do for you

Date post: 15-Jan-2015
Category:
Upload: mattias-isegran-bergander
View: 633 times
Download: 5 times
Share this document with a friend
Description:
Ask not what you can do for your JVM, ask what your JVM can do for you.Ett långsamt mellanlager eller har vi någon nytta av den sett till prestanda?
Popular Tags:
34
Ask not what you can do for your JVM, ask what your JVM can do for you Ett långsamt mellanlager eller har vi någon nytta av den sett till prestanda? Mattias Isegran Bergander
Transcript
Page 1: What your jvm can do for you

Ask not what you can do for your JVM, ask what your JVM

can do for youEtt långsamt mellanlager eller har vi

någon nytta av den sett till prestanda?

Mattias Isegran Bergander

Page 2: What your jvm can do for you

Hur kom denna hit nu då...Hur kom denna hit nu då...

Page 3: What your jvm can do for you

Och den här?!

Page 4: What your jvm can do for you

Det u�ppenbara svaret...

Kommer ni ihåg Java 1.0/1.1?

Jämför med nu...

(förutom att datorerna är snabbare)

Page 5: What your jvm can do for you

Historik

1995: Java 1.0 1996: Java 1.11998: Java 1.22000: Java 1.32002: Java 1.42004: Java 1.52006: Java 1.6.........2011: Java 1.7

Page 6: What your jvm can do for you

Historik: Prestanda

1995: Java 1.0 1996: Java 1.1 Symantec JIT1998: Java 1.2 Generational GC1999: Hotspot2000: Java 1.3 Hotspot default, Math, BigInteger2002: Java 1.4 2003: Java 1.4.2 Prestanda, ännu fler GC, SSE, SSE2, ...2004: Java 1.5 Class data sharing, GC ergonomics2006: Java 1.6 Biased locking, lock coarsening, adaptive spinning, arraycopy, SSE4.2, large page heap

Page 7: What your jvm can do for you

Historik: Prestanda

2006: Java 1.6 2007: u4: Hotspot får separat version, 10.02008: u10: Plugin2, GUI prestanda, kernel installer2009: u14: Hotspot 14, 1:a escape analysis, compressed object pointers, experimental G12009: u1x: Hotspot 15, SSE 4.2 string intrinsics2010 : u18: Hotspot 16,2010: u21: Hotspot 17,2011: u23: Hotspot 19, Escape analysis default enabled2011: u25: Hotspot 202011: u30:2011: Java 1.7 Hotspot 212011: u2: Hotspot 22

Page 8: What your jvm can do for you

Förbättringar genom åren 1.2 1.3 1.4

Page 9: What your jvm can do for you

Förbättringar genom åren 1.2 1.3 1.4

Page 10: What your jvm can do for you

Förbättringar genom åren 1.4.2

Page 11: What your jvm can do for you

Förbättringar genom åren 1.5

Page 12: What your jvm can do for you

Förbättringar genom åren 1.5

Page 13: What your jvm can do for you

Förbättringar genom åren 1.6

Page 14: What your jvm can do for you

Förbättringar genom åren 1.5 1.6 1.7

http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/

Page 15: What your jvm can do for you

Det längre svaret...

Några uppenbara:

● GC i separat(a) tråd(ar)● JIT kompilering i bakgrunden● Bättre utnyttjande av CPU, i386, i586,

Core2, ..., 32/64bit, SSE/1/2/4.2○ Ny JVM => bättre prestanda gratis

utan omkompilering● Fler intrinsics

Page 16: What your jvm can do for you

Det längre svaret...

Bättre analys ger tex:

● Null check elimination, VM behöver göra: if (object == null) throw new NullPointerException()

● Array bounds check elimination 0>=i && i < array.length

● Hoist duplicates & repeated use int length = array.length; for (int i=0;i<array.length;i++) { if (array.length ...) {

Page 17: What your jvm can do for you

Det längre svaret...

VM-lager inte bara nackdelar i prestanda:

● Pointers make optimizations hard x = y + 2 * (...) *p = ... arr[j] = ... z = x + ...

● Garbage Collection -> memory locality

● Runtime optimeringar○ CPU, P4, Sandy Bridge, SSE, cache sizes, cores, ...○ Current class hierarchy and inlining○ Branch predications

Page 18: What your jvm can do for you

Det längre svaret...

Fler:● Generational Garbage Collector● Inlining● Spekulativa optimeringar● Förbättrade Garbage Collectors

○ Senaste: G1, "Garbage First" ● Tiered compilation (vs client/server)● Locks:

○ Lock elision○ Lock coarsining○ Adaptive locking○ Biased locks

● NUMA aware● Large pages (Solaris, Linux)● ...

Page 19: What your jvm can do for you

Det längre svaret...

Några intressanta

● Virtual method inlining

● Escape Analysis (java 6u14, default enabled java7)

Page 20: What your jvm can do for you

Så vad har vi nu då?Programspråket Java hör till kategorin "de snabba språken", tillsammans med Fortran och C/C++

~50-100% av C/C++ prestandaIbland snabbare! Quake2 vs Jake2 (Java5)

Men går utan problem att hitta fall där C++ är snabbare...

Page 21: What your jvm can do for you

Escape AnalysisTex Dimension, Point, get/set, men inte begränsat till det...

http://weblogs.java.net/blog/forax/archive/2009/10/06/jdk7-do-escape-analysis-default

Page 22: What your jvm can do for you

Escape Analysis

Page 23: What your jvm can do for you

Escape Analysis

Off: ~430ms

On: ~110ms

Page 24: What your jvm can do for you

Generational and Copying GC

Allokera en större bit Heap i förväg

Effektivisera per tråd med trådlokalt minne så ingen contention...

Page 25: What your jvm can do for you

Generational and Copying GCGenerational:

● Young, Old (and Perm)

Young● De flesta objekt är kortlivade, 92-98%● Bevara (kopiera) bara de levande!

Minne:

Page 26: What your jvm can do for you

Generational and Copying GCYoung

Page 27: What your jvm can do for you

Generational and Copying GCYoung

Page 28: What your jvm can do for you

Speculative virtual method inlining

Page 29: What your jvm can do for you

Speculative virtual method inlining

Page 30: What your jvm can do for you

Speculative virtual method inlining

Page 31: What your jvm can do for you

February 2, 2004

Bill Venners: When I asked you earlier (In Part IV) about why non-virtual methods are the default in C#, one of your reasons was performance. You said:

We can observe that as people write code in Java, they forget to mark their methods final. Therefore, those methods are virtual. Because they're virtual, they don't perform as well. There's just performance overhead associated with being a virtual method.

Another thing that happens in the adaptive optimizing JVMs is they'll inline virtual method invocations, because a lot of times only one or two implementations are actually being used.

Anders Hejlsberg:They can never inline a virtual method invocation.

http://www.artima.com/intv/choices.html

Page 32: What your jvm can do for you

Framtiden

● Tiered compilation default?● Disruptor pattern● Azul ZingVM -Cliff Click

○ Scalability○ 512GB heap○ Pauseless Garbage Collection

● Java 8○ Hotspot <-> JRockit○ Mer multicore i VM och API (ForkJoin med lambda tex)

● Java 9○ Self-tuning JVM○ Hypervisor integration○ Tail calls, continuations ○ "Massive multicore scalability"

Page 33: What your jvm can do for you

References & Further reading

http://java.sun.com/j2se/1.4.2/performance.guide.htmlhttp://java.sun.com/j2se/1.4.2/1.4.2_whitepaper.htmlhttp://java.sun.com/performance/reference/whitepapers/5.0_performance.htmlhttp://java.sun.com/performance/reference/whitepapers/6_performance.htmlhttp://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

http://www.ibm.com/developerworks/java/library/j-jtp09275/index.htmlhttp://www.ibm.com/developerworks/java/library/j-jtp10185/ http://www.ibm.com/developerworks/java/library/j-jtp12214/index.html

http://scribblethink.org/Computer/javaCbenchmark.html

Page 34: What your jvm can do for you

Tack

Mattias Isegran Bergander

[email protected]

profile.google.com/mattias.bergandertwitter.com/mbergandermattiaslife.blogspot.com


Recommended