java for telco_gc

49
JVM Garbage Collection September 03, 2012 Gökhan Özman 1

Upload: goekhan-oezman

Post on 16-Jul-2015

97 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Java for telco_gc

• JVM Garbage Collection

September 03, 2012

Gökhan Özman

1

Page 2: Java for telco_gc

2

İçerik

1. GC Giriş

2. Java Bellek Modeli

3. GC Nesilleri

4. GC Çeşitleri

5. Nesne Referans Tipleri

6. Hotspot Vm Seçenekleri

Page 3: Java for telco_gc

3

Ne oluyor?

Page 4: Java for telco_gc

4

Garbage Collection(Çöp toplama)

Page 5: Java for telco_gc

5

Çöp ?

Ogrenci a=new Ogrenci();

Ogrenci b=new Ogrenci();

a=b;

ya da

a=null;

Garbage Collection Giriş

a

b

Ogrenci

Ogrenci

Page 6: Java for telco_gc

6

• finalize()

• System.gc()

• Runtime.gc()

Garbage Collection Giriş

Page 7: Java for telco_gc

Neden gc, ne işe yarar?

7

• Bellek geri dönüşümü

• JVM bütünlüğü

• Geliştirici verimliliği

Garbage Collection Giriş

Page 8: Java for telco_gc

8

• Stack• Metotlar

• Lokal değişkenler

• Referans değişkenleri

• Heap• Nesneler

• Sınıf değişkenleri

Java Bellek Modeli

Page 9: Java for telco_gc

Stack&Heap

9

Java Bellek Modeli

main() x

method2 car

method1 b c

p=0

q=0

Car object

stack

heap

Page 10: Java for telco_gc

Java Heap

10

Java Bellek Modeli

Heap

Young gen.Old gen.

%33

Page 11: Java for telco_gc

Young gen.

11

Java Bellek Modeli

Eden Space

Survivor Space 1

Survivor Space 2

Page 12: Java for telco_gc

EDEN

12

Java Bellek Modeli

Page 13: Java for telco_gc

SURVIVOR

13

Java Bellek Modeli

Page 14: Java for telco_gc

Old gen.

14

Java Bellek Modeli

Page 15: Java for telco_gc

Old gen.

15

Java Bellek Modeli

Young gen. Old gen.

Page 16: Java for telco_gc

Java işlem alanı

16

Java Bellek Modeli

Bellek(İşletim Sistemi)

Java işlem alanı(java.exe)

Java nesne alanı(heap) Diğer...

Page 17: Java for telco_gc

Diğerleri

17

• Kalıcı alan

• Kod çevrim alanı

• Soket alanı

• Thread yığını

• Direk bellek alanı

• GC

Java Bellek Modeli

Page 18: Java for telco_gc

Kalıcı Alan(Perm gen.)

18

• Sınıfların metadata elemanları tutulur

• Web uygulamalarında OOM(Out of Memory) hatası

• -XX:PermSize=<deger>(initial)

• -XX:MaxPermSize=<deger>(max)

Java Bellek Modeli

Page 19: Java for telco_gc

Kod çevrim alanı

19

Java Bellek Modeli

Page 20: Java for telco_gc

Kod çevrim alanı

20

• Çok nadir bellek sorunu yaşanır

• Bu alanda yeterli bellek bulunamazsa

JVM büyük ihtimal çöker

Java Bellek Modeli

Page 21: Java for telco_gc

Soket alanı

21

• Her TCP bağlantısı 2 buffer içerir:

1. Alım için: ~37k

2. Gönderim için: ~25k

• Java kodu içerisinde ayarlanır.

• Bellek hatasından önce genelde diğer limitlerde hata oluşur. Örn: IOException: Too many open files

Java Bellek Modeli

Page 22: Java for telco_gc

Thread stack

22

• Özel alan

• Belleğe dikkat

• -Xss

Java Bellek Modeli

Page 23: Java for telco_gc

Direk bellek alanı

23

• Heap dışında belleği kullanma imkanı !

• Java.nio.ByteBuffer.allocateDirect

• -XX:MaxDirectMemorySize=

Java Bellek Modeli

Page 24: Java for telco_gc

24

Nesne Yaşamdöngüsü

Yaratılma

Kullanım

Görünmezlik

ErişilemezlikToplanma

Sonlandırılma

Temizlenme

Page 25: Java for telco_gc

25

• Yaratılma Durumu

• Nesne için gerekli bellek ayrılmıştır

• Nesne yaratımı başlamıştır.

• Super sınıf constructor u çağrılmıştır

Nesne Yaşamdöngüsü

Page 26: Java for telco_gc

26

• Kullanım Durumu

• En az bir strong referans tarafından erişim vardır.

Nesne Yaşamdöngüsü

Page 27: Java for telco_gc

27

• Görünmezlik Durumu

• Herhangi bir strong referans kalmadıysa

Nesne Yaşamdöngüsü

Page 28: Java for telco_gc

28

• Erişilemezlik Durumu

• Collection için aday

• Circular referanslar sayılmaz

Nesne Yaşamdöngüsü

Page 29: Java for telco_gc

Erişilmezlik Durumu

29

Java Bellek Modeli

main()

buildCar()

Car

Engine

Stack

Heap

Page 30: Java for telco_gc

30

• Toplanma Durumu

• GC nesnenin artık erişilemez durumda oldugunu tespit eder

• Finalize()

• Finalized

• Deallocated

Nesne Yaşamdöngüsü

Page 31: Java for telco_gc

31

• Strong

• Soft

• Weak

• Phantom

Nesne Referans Tipleri

Page 32: Java for telco_gc

32

• Strong Referans

• En çok kullandığımız referans tipi

Person person = new Person();

person = null;

Nesne Referans Tipleri

Page 33: Java for telco_gc

33

• Soft Referans

• Cache için oldukça uygundur.

• OutOfMemory e kadar dayanır.

Person person = new Person();

SoftReference<Person> softPerson = new

SoftReference<Person>(person);

Nesne Referans Tipleri

Page 34: Java for telco_gc

34

• Weak Referans

• Sadece weak referans kalmışsa gc toplar.

Person person = new Person();

WeakReference<Person> weakPerson = new

WeakReference<Person>(person);

Nesne Referans Tipleri

Page 35: Java for telco_gc

35

• Phantom Referans

• finalize() !!!

• Nesneye erişim için kullanılmaz

ReferenceQueue q = new ReferenceQueue();

PhantomReference phantomImage= new

PhantomReference(bigImage, q);

q.remove();

Nesne Referans Tipleri

Page 36: Java for telco_gc

Algoritmalar

36

• Referans sayma

• Referans takip etme

GC Çeşitleri

Page 37: Java for telco_gc

Yöntemler

37

• Sıkıştırma(compacting collector)

• Kopyalama(copying collector)

• Nesillere ayırma(generational collector)

GC Çeşitleri

Page 38: Java for telco_gc

Yaklaşımlar(çalışma zamanı bakımından)

38

• Stop the World

• Incremental

• Concurrent

GC Çeşitleri

Page 39: Java for telco_gc

GC Zamanları

39

• Heap büyüklüğüne göre değişir.

• Minor collection

• Major collection

GC Çeşitleri

Page 40: Java for telco_gc

-verbose:gc

40

GC Çeşitleri

Toplam young gen. alanı Toplam old gen. alanı Toplam perm gen. alanı

Full gc süresi Old gen. de kalan nesneler Perm gen. boyutu

Page 41: Java for telco_gc

Serial Collector

41

Collector Çeşitleri

GC GCUygulama Uygulama Uygulama

Page 42: Java for telco_gc

Paralel(Throughput) Collector

42

Collector Çeşitleri

GC GCUygulama Uygulama Uygulama

Page 43: Java for telco_gc

Concurrent Mark&Sweep(CMS) Collector

43

Collector Çeşitleri

GC GCUygulama Uygulama Uygulama

initial mark

concurrent mark

remark concurrentsweep

Page 44: Java for telco_gc

Gargabe First Collector

44

• Garbage First (G1) Collector

Total Java Heap

Collector Çeşitleri

Region 1 Region 2 Region 3 Region 4 Region 5 Region n...

Page 45: Java for telco_gc

Gargabe First Collector

45

• Garbage First (G1) Collector

• -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

• -XX:MaxGCPauseMillis=n

• -XX:G1HeapRegionSize=n

• -XX:ParallelGCThreads=n

Collector Çeşitleri

Page 46: Java for telco_gc

Heap/Generation Sizing

46

• Heap Size: -Xms, -Xmx

Örn: Xms 128m -Xmx 1g

• -XX:MinHeapFreeRatio=40

GC sonrası kalan min. heap miktarı. tavsiye edilen miktar %40

• -XX:MaxHeapFreeRatio=70

GC sonrası kalan max. heap miktarı. tavsiye edilen miktar %70

• -XX:NewRatio=2

new/old generation oranı

• -XX:NewSize=128m new generation büyüklük degeri.

• -XX:SurvivorRatio=3

eden/survivor space oranı

HotSpot VM Options

Page 47: Java for telco_gc

Heap/Generation Sizing

47

• Permanent Size:

• -XX:PermSize -XX:MaxPermSize

• Stack Size :

• -Xss 128k veya -XX:ThreadStackSize=128k

• Solaris x86 nın default verdiği değer 512k

HotSpot VM Options

Page 48: Java for telco_gc

GC Davranışı ile ilgili parametreler

48

• -XX:MaxTenuringThreshold

• Tenuring Threshold: Young Gen’deki canlı bir objenin kaç minor collection süresi boyunca hala canlıysa, «promote» olması gerektiğini ifade eden bir değer

• XX:+DisableExplicitGC

• Explicit gc yi kapat. System.gc()’yi çağırdığınız zaman GC tetiklenmez

• XX:ParallelGCThreads=n ve -XX:ConcGCThreads=m (default: CPU sayısı kadar)

• Parallel ve CMS collector thread sayıları

• -XX:CMSInitiatingOccupancyFraction=90

• CMS’i geç başlatmak: Old’un %90’ı dolmadan CMS’i başlatma

• -XX:+CMSClassUnloadingEnabled

• CMS’in Perm Gen’i temizlemesi için

HotSpot VM Options

Page 49: Java for telco_gc

Debugging

49

• VM hatalarını belli bir file’a yazdır:

• -XX:ErrorFile=./hs_err_pid<pid>.log

• Out of memory olduğuda «heap dump» al:

• XX:+HeapDumpOnOutOfMemoryError

• -XX:HeapDumpPath=./java_pid<pid>.hprof

• Hata ve out of memory durumlarında aksiyon almak

• -XX:OnError="<cmd args>;<cmd args>"

• -XX:OnOutOfMemoryError="<cmd args>; <cmd args>"

HotSpot VM Options