Java memory presentation

148
Java;Memory Yury Bubnov zStore

description

 

Transcript of Java memory presentation

Page 1: Java memory presentation

Java;Memory

Yury BubnovzStore

Page 2: Java memory presentation

Object o = new Object();

Page 3: Java memory presentation

Object o = new Object();

java.lang.OutOfMemoryError:  Java  heap  space

Page 4: Java memory presentation

Object o = new Object();

java.lang.OutOfMemoryError:  Java  heap  space

Page 5: Java memory presentation

Heap

Page 6: Java memory presentation

Heap

How many?

Page 7: Java memory presentation

Heap

How many?Size?

Page 8: Java memory presentation

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

Page 9: Java memory presentation

1 2 4/8

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

Page 10: Java memory presentation

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

markmarkmark klass

2 1 1 4

Page 11: Java memory presentation

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

2

8

markmarkmark klass

2 1 1 4

Page 12: Java memory presentation

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

markmarkmark

klassklassklass

2 1 5

888

Page 13: Java memory presentation

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

markmarkmark

klassklassklass

2 1 5

888

4

8

Page 14: Java memory presentation

Memory address

...01100100100111011001011000

Page 15: Java memory presentation

Memory address

...01100100100111011001011000

Page 16: Java memory presentation

Memory address

...01100100100111011001011000

32 bit pointer

Page 17: Java memory presentation

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

Page 18: Java memory presentation

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

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

Page 19: Java memory presentation

Memory address

...01100100100111011001011000

32 bit pointer .... to 35 bit

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

IBM J9: Java 6 SR1- not enabled by defaultHotspot: since Java 6u14, by default since u23

Page 20: Java memory presentation

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

markmarkmarkmark

klass 1 2 1

4 444

Page 21: Java memory presentation

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

3

8

markmarkmarkmark

klass 1 2 1

4 444

Page 22: Java memory presentation

klassklass flags flags monitormonitor 44

1 3 2 2=24b

klassklassklassklassflagsflags size*size*

monitormonitormonitormonitor8888

1 3 2 2

klass flagsflagsflagsmonitor 1 33

4 22 2

=40b

=24b

i386

x64

x64C

IBM J9

Page 23: Java memory presentation

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

Page 24: Java memory presentation

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

Mind the gap

Page 26: Java memory presentation

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

Page 27: Java memory presentation

Mind the gap

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

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

Page 28: Java memory presentation

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

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

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

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

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

Heap

Page 34: Java memory presentation

Heap

Young/Eden

Old/Tenured

Page 35: Java memory presentation

Heap (HS)Young/Eden

Old/Tenured

Survivor 1 Survivor 2

Page 36: Java memory presentation

Heap (HS)

Page 37: Java memory presentation

Heap (HS)

Page 38: Java memory presentation

Heap (HS)TLABTLH

Page 39: Java memory presentation

Heap (HS)TLABTLH

Page 40: Java memory presentation

Heap (HS)TLABTLH

Page 41: Java memory presentation

Heap (HS)

Page 42: Java memory presentation

Heap (HS)

Page 43: Java memory presentation

Heap (HS)

Page 44: Java memory presentation

Heap (HS)X X X

Page 45: Java memory presentation

Heap (HS)

Page 46: Java memory presentation

Heap (HS)

Page 47: Java memory presentation

Heap (HS)

Page 48: Java memory presentation

Heap (HS)X XX XX

X

Page 49: Java memory presentation

Heap (HS)

Page 50: Java memory presentation

Heap (HS)

Page 51: Java memory presentation

Heap (HS)

Page 52: Java memory presentation

Heap (HS)X XX XX

X

Page 53: Java memory presentation

Heap (HS)

Page 54: Java memory presentation

Heap (J9)

Young/Eden

Old/Tenured

Page 55: Java memory presentation

Heap (J9)

Allocation

Old/Tenured

Survivor

Page 56: Java memory presentation

Heap (J9)

Page 57: Java memory presentation

Heap (J9)

Page 58: Java memory presentation

Heap (J9)

Page 59: Java memory presentation

Heap (J9)

Page 60: Java memory presentation

Heap (J9)

Page 61: Java memory presentation

Garbage Collection

Page 62: Java memory presentation

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

Page 63: Java memory presentation

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

2. Stop-of-the-world operation

Page 64: Java memory presentation

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 65: Java memory presentation

Mark

Page 66: Java memory presentation

Mark

Page 67: Java memory presentation

MarkPermGen

Stack

JNI

Stack Stack

Page 68: Java memory presentation

MarkPermGen

Stack

JNIX X

X

X

Stack Stack

Page 69: Java memory presentation

Mark

A

B C

DE

Page 70: Java memory presentation

A B0 0 0

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

Mark

A

B C

DE

Page 71: Java memory presentation

1A B

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

A

Mark

A

B C

DE

Page 72: Java memory presentation

1A B

0C D E

0 0 0 0 0 0 0 0 0

Mark

A

B C

DE

BC

1 1

Page 73: Java memory presentation

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE CE

1 1 1

Page 74: Java memory presentation

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE E

1 1 1

Page 75: Java memory presentation

1A B

0C D E

0 0 0 0 0 0 0 0

Mark

A

B C

DE

1 1 1

Page 76: Java memory presentation

1A B C D E

0 0 0

Mark

A

B C

DE

1 1 11 1 1 1 1 1

Page 77: Java memory presentation

1A B C D E

0 0 0

Mark

A

B C

DE

1 1 11 1 1 1 1 1

Page 78: Java memory presentation

References

Page 79: Java memory presentation

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 80: Java memory presentation

Mark

Page 81: Java memory presentation

MarkSerial

Page 82: Java memory presentation

Mark

Page 83: Java memory presentation

MarkParallel

Page 84: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 85: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 86: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 87: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 88: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 89: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 90: Java memory presentation

MarkPermGen

JNI

Stack Stack Stack

Page 91: Java memory presentation

MarkPermGen

JNI

Concurrent

Stack Stack Stack

Page 92: Java memory presentation

Sweep

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

Page 93: Java memory presentation

Sweep

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

Page 94: Java memory presentation

Sweep

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

Page 95: Java memory presentation

Sweep

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

Page 96: Java memory presentation

Sweep

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

Serial

Page 97: Java memory presentation

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 98: Java memory presentation

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 99: Java memory presentation

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 100: Java memory presentation

Sweep

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

Page 101: Java memory presentation

Sweep

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

Page 102: Java memory presentation

Sweep

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

Page 103: Java memory presentation

Sweep

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

Page 104: Java memory presentation

Sweep

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

Page 105: Java memory presentation

Sweep

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

Concurrent

Page 106: Java memory presentation

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 107: Java memory presentation

Garbage Collection

Serial Parallel Concurrent

Which one to choose?

Page 108: Java memory presentation

Heap (J9)

Allocation

Old/Tenured

Survivor

Page 109: Java memory presentation

PermGen

Page 110: Java memory presentation

PermGen

BootstrapSystem

Page 111: Java memory presentation

PermGen

BootstrapSystem Ext

Page 112: Java memory presentation

PermGen

BootstrapSystem Ext Web

App

Page 113: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

Page 114: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

Page 115: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

Page 116: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

WebApp

Page 117: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

WebApp

java.lang.OutOfMemoryError:  PermGen  space

Page 118: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

Page 119: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

Heap

Page 120: Java memory presentation

PermGen

BootstrapSystem Ext Web

AppWebApp

WebApp

WebApp

Stack

Heap

Page 121: Java memory presentation

Stack

Page 122: Java memory presentation

Stack

Page 123: Java memory presentation

Stack

Page 124: Java memory presentation

Stack

Page 125: Java memory presentation

Stack

Page 126: Java memory presentation

Stack

Page 127: Java memory presentation

Stack

java.lang.StackOverflowError

Page 128: Java memory presentation

Memory

Page 129: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

Page 130: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

Page 131: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

Stack Stack Stack

Page 132: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen GC

Stack Stack Stack

Page 133: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Stack Stack Stack

Page 134: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

Stack Stack Stack

Page 135: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

Stack Stack Stack

Page 136: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

Stack Stack Stack

Page 137: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

CL

Stack Stack Stack

Page 138: Java memory presentation

Memory

Allocation

Old/Tenured

Survivor

PermGen

JNI

GC

Net

NIO

JIT

CL

Stack Stack Stack C++

Page 139: Java memory presentation

Paging

Page 140: Java memory presentation

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

2. Pages mapped to physical only when referenced

3. OS manages pages

Page 141: Java memory presentation

Real size of Java Process?

Page 142: Java memory presentation

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

Page 143: Java memory presentation

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

2. JVM vendor: Oracle vs IBM

Page 144: Java memory presentation

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

2. JVM vendor: Oracle vs IBM

3. JVM version incl. update

Page 145: Java memory presentation

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 146: Java memory presentation

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 147: Java memory presentation

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 148: Java memory presentation

?