java memory presentation ibm 7

161
Java;Memory Yury Bubnov zStore

Upload: yury-bubnov

Post on 15-Jan-2015

243 views

Category:

Software


10 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Java memory presentation IBM 7

Java;Memory

Yury Bubnov zStore

Page 2: Java memory presentation IBM 7

Object o = new Object();

Page 3: Java memory presentation IBM 7

Object o = new Object();

java.lang.OutOfMemoryError:  Java  heap  space

Page 4: Java memory presentation IBM 7

Object o = new Object();

java.lang.OutOfMemoryError:  Java  heap  space

Page 5: Java memory presentation IBM 7

Heap

Page 6: Java memory presentation IBM 7

Heap

How many?

Page 7: Java memory presentation IBM 7

Heap

How many?Size?

Page 8: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

Page 9: Java memory presentation IBM 7

1 2 4/8

class Structure{ byte b; short i; Object o; }

Page 10: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

mark klass

2 1 1 4

Page 11: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

2

8

mark klass

2 1 1 4

Page 12: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

mark

klass

2 1 5

8

Page 13: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

mark

klass

2 1 5

8

4

8

Page 14: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

Page 15: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

Page 16: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

32 bit pointer

Page 17: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

Page 18: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

2^35≈32GB (25-28GB Heap)

Page 19: Java memory presentation IBM 7

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

2^35≈32GB (25-28GB Heap)

IBM J9: Java 6 SR1, by default since Java7 SR4 Hotspot: since Java 6u14, by default since u23

Page 20: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

mark

klass 1 2 1

4 4

Page 21: Java memory presentation IBM 7

class Structure{ byte b; short i; Object o; }

3

8

mark

klass 1 2 1

4 4

Page 22: Java memory presentation IBM 7

klass flagsmonitor 4

1 3 2 2=24b

klassflags size*

monitor8

1 3 2 2

klass flagsmonitor 1 3

4 2 2

=40b

=24b

i386

x64

x64C

IBM J9 Java6

Page 23: Java memory presentation IBM 7

What’s the object size?class Structure{ byte b;short i;Object o;}

Page 24: Java memory presentation IBM 7

What’s the object size?

HS 32b 16b

HS 64b before u14 32b

HS 64b after u14 (u27) 24b

J9 32b 24b

J9 64b 40b

J9 64b compressed 24b

class Structure{ byte b;short i;Object o;}

Page 25: Java memory presentation IBM 7

Mind the gap

Page 26: Java memory presentation IBM 7

Mind the gapbyte[][][] b = new byte[10][100][1000];

Page 27: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

Page 28: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

1.032.344= 1.000.000+ 8.080(r)+20.220(h)+4.044(a)

Page 29: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

4.832.024= 1.000.000+ 808.000(r)+2.020.020(h)+1.004.004(a)

1.032.344= 1.000.000+ 8.080(r)+20.220(h)+4.044(a)

Page 30: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

4.832.024= 1.000.000+ 808.000(r)+2.020.020(h)+1.004.004(a)

1.032.344= 1.000.000+ 8.080(r)+20.220(h)+4.044(a)

x100

Page 31: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

4.832.024= 1.000.000+ 808.000(r)+2.020.020(h)+1.004.004(a)

1.032.344= 1.000.000+ 8.080(r)+20.220(h)+4.044(a)

x100 x100

Page 32: Java memory presentation IBM 7

Mind the gap

byte[][][] b = new byte[1000][100][10];

byte[][][] b = new byte[10][100][1000];

4.832.024= 1.000.000+ 808.000(r)+2.020.020(h)+1.004.004(a)

1.032.344= 1.000.000+ 8.080(r)+20.220(h)+4.044(a)

x100 x100 x250

Page 33: Java memory presentation IBM 7

header4 1 3

2 6=24bx64C

IBM J9 Java7 for ebay

Structure:

header

8=16bx64C

byte[8]:

*Could be as little as 4 bytes (JavaOne 2011)

Page 34: Java memory presentation IBM 7

Garbage Collection

Page 35: Java memory presentation IBM 7

Garbage Collection1. Starts if allocation fails or System.gc()* called or condition met

Page 36: Java memory presentation IBM 7

Garbage Collection1. Starts if allocation fails or System.gc()* called or condition met

2. Stop-of-the-world operation

Page 37: Java memory presentation IBM 7

Garbage Collection1. Starts if allocation fails or System.gc()* called or condition met

2. Stop-of-the-world operation

3. Mark, Sweep and Compact*

Page 38: Java memory presentation IBM 7

Mark

Page 39: Java memory presentation IBM 7

Mark

Page 40: Java memory presentation IBM 7

MarkPermGen

Stack

JNI

Stack Stack

Page 41: Java memory presentation IBM 7

MarkPermGen

Stack

JNIX X

X

X

Stack Stack

Page 42: Java memory presentation IBM 7

Mark

A

B C

DE

Page 43: Java memory presentation IBM 7

A B0 0 0

C D E0 0 0 0 0 0 0 0 0 0

Mark

A

B C

DE

Page 44: Java memory presentation IBM 7

1A B

0 0C D E0 0 0 0 0 0 0 0 0 0

A

Mark

A

B C

DE

Page 45: Java memory presentation IBM 7

1A B

0C D E

0 0 0 0 0 0 0 0 0

Mark

A

B C

DE

BC

1 1

Page 46: Java memory presentation IBM 7

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE CE

1 1 1

Page 47: Java memory presentation IBM 7

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE E

1 1 1

Page 48: Java memory presentation IBM 7

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE

1 1 1

Page 49: Java memory presentation IBM 7

1A B C D E

0 0 0

Mark

A

B C

DE

1 1 11 1 1 1 1 1

Page 50: Java memory presentation IBM 7

1A B C D E

0 0 0

Mark

A

B C

DE

1 1 11 1 1 1 1 1

Page 51: Java memory presentation IBM 7

References

Page 52: Java memory presentation IBM 7

References1. Strong - always marked !

2. Soft - not marked if too old or need memory !

3. Weak - not marked if no strong reference !

4. Phantom - correct implementation of finalize() method

Page 53: Java memory presentation IBM 7

Mark

Page 54: Java memory presentation IBM 7

MarkSerial

Page 55: Java memory presentation IBM 7

Mark

Page 56: Java memory presentation IBM 7

MarkParallel

Page 57: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 58: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 59: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 60: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 61: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 62: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 63: Java memory presentation IBM 7

MarkPermGen

JNI

Stack Stack Stack

Page 64: Java memory presentation IBM 7

MarkPermGen

JNI

Concurrent

Stack Stack Stack

Page 65: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 66: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 67: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 68: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 69: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Serial

Page 70: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

... 1 0 0 1 1 1 0 0 0 1 1 ...

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 71: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

... 1 0 0 1 1 1 0 0 0 1 1 ...

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 72: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Parallel

... 1 0 0 1 1 1 0 0 0 1 1 ...

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 73: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 74: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 75: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 76: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 77: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Page 78: Java memory presentation IBM 7

Sweep

... 1 0 0 1 1 1 0 0 0 1 1 ...

Concurrent

Page 79: Java memory presentation IBM 7

1 1 0 0 1 1 1 0 0 0 1 1 ...

Compact

1 1 1 1 1 1 1 0 0 0 0 0 ...

Page 80: Java memory presentation IBM 7

optthuput (default in Java6) parallel mark and compact. contiguous heap !optavgpause concurrent mark and sweep. contiguous heap !gencon (default in Java7) copying GC for young area concurrent mark for old area !

balanced (new for Java7) heap split to small regions (G1)

Types of Garbage Collection

Page 81: Java memory presentation IBM 7

Heap

Page 82: Java memory presentation IBM 7

Heap (J9)

Young/Eden

Old/Tenured

Page 83: Java memory presentation IBM 7

Heap (J9)

Allocation

Old/Tenured

Survivor

Page 84: Java memory presentation IBM 7

Heap (J9)

Page 85: Java memory presentation IBM 7

Heap (J9)

Page 86: Java memory presentation IBM 7

Heap (J9)

Page 87: Java memory presentation IBM 7

Heap (J9)

Page 88: Java memory presentation IBM 7

Heap (J9)

Page 89: Java memory presentation IBM 7

Balanced GC

Page 90: Java memory presentation IBM 7

Balanced GC

Page 91: Java memory presentation IBM 7

Balanced GC

Page 92: Java memory presentation IBM 7

Balanced GC

0 Free Free 1 3

Free 0 0 2 0

Free 2 10 11 5

0 2 Free 3 1

1 Free 15 Free 0

Page 93: Java memory presentation IBM 7

Balanced GC

Page 94: Java memory presentation IBM 7

Balanced GC

1. Partial garbage collection (PGC)

Page 95: Java memory presentation IBM 7

Balanced GC

1. Partial garbage collection (PGC)

2. Global mark phase (GMP)

Page 96: Java memory presentation IBM 7

Balanced GC

1. Partial garbage collection (PGC)

2. Global mark phase (GMP)

3. Global garbage collection (GGC)

Page 97: Java memory presentation IBM 7

Partial Garbage Collection

1. All Eden regions

2. Regions from CMP3. Statistics

Page 98: Java memory presentation IBM 7

Partial Garbage Collection

0 Free 0 1 3 2

Free 1 Free 2 4 Free

1. All Eden regions

2. Regions from CMP3. Statistics

Page 99: Java memory presentation IBM 7

Arraylets

Page 100: Java memory presentation IBM 7

PermGen

Page 101: Java memory presentation IBM 7

PermGen

Bootstrap System

Page 102: Java memory presentation IBM 7

PermGen

Bootstrap System Ext

Page 103: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

App

Page 104: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

Page 105: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

Page 106: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

Page 107: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

WebApp

Page 108: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

WebApp

java.lang.OutOfMemoryError:  PermGen  space

Page 109: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

Page 110: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

Heap

Page 111: Java memory presentation IBM 7

PermGen

Bootstrap System Ext Web

AppWebApp

WebApp

WebApp

Stack

Heap

Page 112: Java memory presentation IBM 7

Stack

Page 113: Java memory presentation IBM 7

Stack

Page 114: Java memory presentation IBM 7

Stack

Page 115: Java memory presentation IBM 7

Stack

Page 116: Java memory presentation IBM 7

Stack

Page 117: Java memory presentation IBM 7

Stack

Page 118: Java memory presentation IBM 7

Stack

java.lang.StackOverflowError

Page 119: Java memory presentation IBM 7

Memory

Page 120: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

Page 121: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

Page 122: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

Stack Stack Stack

Page 123: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen GC

Stack Stack Stack

Page 124: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Stack Stack Stack

Page 125: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

Stack Stack Stack

Page 126: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

Stack Stack Stack

Page 127: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

Stack Stack Stack

Page 128: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

CL

Stack Stack Stack

Page 129: Java memory presentation IBM 7

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

CL

Stack Stack Stack C++

Page 130: Java memory presentation IBM 7

Paging

Page 131: Java memory presentation IBM 7

Paging1. Linux/Windows use Virtual memory and “paging” to reference physical !

2. Pages mapped to physical only when referenced !

3. OS manages pages

Page 132: Java memory presentation IBM 7

Real size of Java Process?

Page 133: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

Page 134: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

2. JVM vendor: Oracle vs IBM

Page 135: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

2. JVM vendor: Oracle vs IBM

3. JVM version incl. update

Page 136: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

2. JVM vendor: Oracle vs IBM

3. JVM version incl. update

4. JVM settings

Page 137: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

2. JVM vendor: Oracle vs IBM

3. JVM version incl. update

5. OS (above applies)

4. JVM settings

Page 138: Java memory presentation IBM 7

Real size of Java Process?1. Architecture: 32 vs 64

2. JVM vendor: Oracle vs IBM

3. JVM version incl. update

5. OS (above applies)

+ Run under real load for long time

4. JVM settings

Page 139: Java memory presentation IBM 7

?

Page 140: Java memory presentation IBM 7

Heap

Young/Eden

Old/Tenured

Page 141: Java memory presentation IBM 7

Heap (HS)Young/Eden

Old/Tenured

Survivor 1 Survivor 2

Page 142: Java memory presentation IBM 7

Heap (HS)

Page 143: Java memory presentation IBM 7

Heap (HS)

Page 144: Java memory presentation IBM 7

Heap (HS)TLAB TLH

Page 145: Java memory presentation IBM 7

Heap (HS)TLAB TLH

Page 146: Java memory presentation IBM 7

Heap (HS)TLAB TLH

Page 147: Java memory presentation IBM 7

Heap (HS)

Page 148: Java memory presentation IBM 7

Heap (HS)

Page 149: Java memory presentation IBM 7

Heap (HS)

Page 150: Java memory presentation IBM 7

Heap (HS)X X X

Page 151: Java memory presentation IBM 7

Heap (HS)

Page 152: Java memory presentation IBM 7

Heap (HS)

Page 153: Java memory presentation IBM 7

Heap (HS)

Page 154: Java memory presentation IBM 7

Heap (HS)X XX XX

X

Page 155: Java memory presentation IBM 7

Heap (HS)

Page 156: Java memory presentation IBM 7

Heap (HS)

Page 157: Java memory presentation IBM 7

Heap (HS)

Page 158: Java memory presentation IBM 7

Heap (HS)X XX XX

X

Page 159: Java memory presentation IBM 7

Heap (HS)

Page 160: Java memory presentation IBM 7

Heap (J9)

Allocation

Old/Tenured

Survivor

Page 161: Java memory presentation IBM 7

Garbage Collection

Serial Parallel Concurrent

Which one to choose?