Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Java Memory Model

No description
by

Malgorzata Mrowka

on 14 March 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Java Memory Model

Heap memory
Współdzielony pomiędzy wątkami
Przechowuje obiekty
Young Generation(Eden, Survivor)
Old Generation
Architektura modelu pamięci

Java Memory Model
EDEN SPACE
Zawiera:
nowo utworzone obiekty


OLD GENERATION SPACE
Zawiera:
obiekty z Survivor
duże obiekty, bezpośrednio utworzone w old generation
SURVIVOR SPACE
Zawiera:
obiekty z Eden
Obszary "To" i "From" (jeden z nich zawsze pusty)
Cykl życia obiektu w pamięci
Method Area (permanent generation, Perm Gen)
zawiera kod klas, metod
współdzielony między watkami
Native Area (Thread 1..N)
private stack (local)
zawiera referencje do obiektów z Heap
przetrzymuje lokalne zmienne (dla prymitywów)
Przykład
Garbage Collection
Zadania:
odzyskiwanie pamięci, po obiektach do których nie ma już referencji
zapewnienie istnienia w pamięci obiektów do których jest referencja
Rozwiazanie problemów
:
daugling reference
space leaks
Garbage Collection
Design Choices:
Serial vs Parallel
Concurrent vs stop-the-world
Compacting vs Non-compacting vs Copying
Young Generation vs Old Generation
Young Generation Old Generation

obszar pamięci MNIEJSZY WIĘKSZY

częstotliwość WIĘKSZA MNIEJSZA
odśmiecania

wydajność WIĘKSZA MNIEJSZA
odśmiecania

algorytm GC zorientowany zorientowany
na szybkość na wydajność
przestrzeni pamięci

Algorytmy Garbage Collection
dla Young Generation
dla Old i Permanent Generation
Sekwencja uruchamiania
Jeśli jest pełny, w przypadku wszystkich

algorytmów poza CMS, dla nie jest uruchamiany
Fast Allocation
na podstawie ostatnio zaalokowanego obiektu w Eden (top)

sprawdzenie ilości wolnego miejsca w generacji

obiekt trafia na top Eden

Zaleta: tylko ostatnio dodany obiekt jest sprawdzany
Alokacja bump-the pointer
Dla aplikacji wielowątkowych:
TLAB(Thread-Loacl Allocation Buffer), obszar generacji, per wątek

W obrębie TLAB wykorzystywany jest bump-the-pointer

Synchronizacja tylko gdy TLAB zapełniony
Serial Collector
technika stop-the-world
jeden CPU
Obiekty, które są za duże na Survivor przenoszone sa bezpośrednio do OG

Zamiana To z From
OG i PG odśmiecane za pomocą algorytmu mark-sweep-compact
Mark - identyfikcja live obiektów
Sweep - identyfikacja śmieci
Compact - przesunięcie live obiektów na początek generacji.
Efekt: Brak framgentacji
Kiedy używać?
client-style machines
kiedy stop-the-world nie jest problemem
Jak wybrać ten algorytm?
w J2SE 5.0 jest domyślny, dla nie server-class machines
-XX: +UseSerialGC
PARALLEL COLLECTOR (THROUGHPUT)
dla : analogcznie do serial collector, ale równolegle, wiele CPUs
dla : algorytm mark-sweep-compact, dokładnie tak samo jak serial collector
Kiedy używać?
Jak wybrać ten algorytm?
jak mamy więcej niż jeden CPU
kiedy stop-the-world nie jest problemem
zastosowania np.: batch processing, billing, payroll, scientific computing,
w J2SE 5.0 domyślny dla server-class machines
-XX:+UserParallelGC
Parallel Compacting Collector
dla
analogicznie jak dla parallel colector
Marking Phase:
podział na regiony
identyfikacja rozmiaru i lokalizacji live obiektów w regionie
Summary Phase:
operacje na regionach, nie obiektach
analiza density - live/wszystkich w regionie
obiekty po prawej od dense prefix będa kompaktowane
Compaction Phase:
Identyfikacja regionów do wypełnienia obiektami
Kopiowanie obiektów
Kiedy używać?
więcej niż 1 CPU
jeśli czas zamrożenia aplikacji (stop-the-world) jest istotny, tutaj krótszy niż w Parallel Collector
Jak wybrać ten algorytm?
-XX: +UseParallelOldGC
Concurrent Mark-Sweep(CMS) Collector
- the same as parallel collector
Initial Mark - identyfikacja live objektów (first-level obiects); aplikacji
Concurrent Mark
Remark - sprawdzenie zmienionych obiektów
aplikacji, Wielowątkowo
Concurrent Sweep
CMS
Zalety:

redukcja pauzy wynikającej z stop-the-world

Wady:

mniej wydajny niż bump-the-pointer
potrzebne jest więcej pamięci
problem floating garbage
fragmentacja
brak kompaktowania
listy przechowujące wolne regiony
Kiedy używać?
kiedy jest potrzeba skrócenia pauz z stop-the-world
Jak wybrać ten algorytm?
-XX: +UseConcMarkSweepGC
Stan obiektu: live, dead, garbage
STRONG
WEAK
słabsza odmiana soft referencji
SOFT
zostaną usunięte w sytuacji gdy stwierdzi niewystarczającą ilość pamięci dla innych obiektów

usunięcie obiektów, na które wskazują referencje miękkie nastąpi przed OutOfMemoryError

nadają sie na cache
PHANTOM
PhantomReference.get() zawsze zwraca null

stosuje się żeby śledzić kiedy referencja jest skolejkowana na ReferenceQueue

daja możliwość sprawdzenia, kiedy obiekt został usunięty z pamięci
Rodzaje referencji
najczęściej używane
obiekty z tą referencją są niedostępne dla GC
PROBLEMY:
należy pamiętać kiedy adres nie będzie już potrzebny, żeby usunąć go z mapy,

bo go nie usunie!


w przeciwnym razie -> Memory Leak
Cache:
Przykład: przechowywanie obrazków w pamięci
może się okazać że get zwróci null zamiast user

ReferenceQueue jako parametr konstruktora WeakReference

WeakHashMap przechowuje klucze jako referencje weak


Jeśli usuwa klucz z WeakHashMap, wartości mapy są automatycznie usuwane
Bibliografia:
http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf

http://www.pointsoftware.ch/de/under-the-hood-runtime-data-areas-javas-memory-model/

http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/

https://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html
Gdzie szukać OutOfMemoryError?
java.lang.OutOfMemoryError: Java heap space : obiekt nie mógł być alokowany w heap space

java.lang.OutOfMemoryError: PermGen space : klasy, metody nie mogły być załadowane

java.lang.OutOfMemoryError: Requested array size exceeds VM limit : array za duży dla heap space
Young Generation
: Jak żyć?
Serial vs Parallel


Concurrent vs stop-the-world


Compacting vs Non-comapcting vs Copying
Full transcript