Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Garbage Collector
Conociendo el manejo de memoria en el JVM
@SuperSerch
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
¿Qué ocurre en la memoria?
Retos al administrar la memoria
Velocidad de asignación ( velocidad de creación de objetos )
Seguimiento de objetos y valo...
JVMS: 2.5.3 Heap
The heap is created on virtual machine start-up. Heap storage for objects
is reclaimed by an automatic st...
JVMS: 2.5.3 Heap
The heap is created on virtual machine start-up. Heap storage for objects
is reclaimed by an automatic st...
Hipótesis Generacional
Hipótesis generacional debil
La mayoría de los objetos mueren jovenes
80% - 95% de los objetos en 1...
Memoria generacional
PermGen
(jdk8-nativo)
Old Gen
Young Gen
Young Gen
Young Gen
Eden
Survivor Spaces
From To⇄
Allocation
Allocation
Allocation
From To
Allocation
From To
Allocation
To From
Allocation
To From
Allocation
From To
Promotion
From To
No hay espacio suficiente
Promotion
From To
Old Generation
Colectores en Oracle JVM
Serial Garbage Collector
Parallel Garbage Collector
Concurrent Mark-Sweep Garbage Collector
G1 Ga...
Serial Garbage Collector
Compactación por deslizamiento, con
una pausa stop-the-world
Util para ambientes con 1 virtual
co...
Parallel Garbage Collector
Compactación por deslizamiento, con
una pausa stop-the-world
utiliza todos los núcleos disponib...
Concurrent Mark-Sweep Garbage
Collector
Diseñado para tener un tiempo de
respuesta consistente
Hace gran parte del trabajo...
G1 Garbage Collector
(Garbage 1srt)
G1 Garbage Collector
(Garbage 1srt)
G1 Garbage Collector
(Garbage 1srt)
G1 Garbage Collector
(Garbage 1srt)
G1 Garbage Collector
(Garbage 1srt)
G1 Garbage Collector
(Garbage 1srt)
Paralelo, concurrente e incremental
Pausas cortas y alto throughput
Divide el heap en ...
¿Cuándo un Objeto es basura?
Un objeto es elegible para ser colectado cuando desde
ningún GC Root de la jvm se puede alcan...
GC Roots de la JVM
Variables locales (stack)
Threads activos
Variables estáticas
Referencias JNI
GC Roots
Objetos
Alcanzab...
Tipos de Referencias
Fuerte
Suave ( SoftReference )
Debil ( WeakReference )
Fantasma ( PhantomReference )
Ejemplo WeakReference
WagTask.run Kennel.dogCache
WeakReference
Dog
Tail
Stack Heap
Ejemplo WeakReference
WagTask.run Kennel.dogCache
WeakReference
Dog
Tail
Stack Heap
El Thread se muere
Ejemplo WeakReference
Kennel.dogCache
WeakReference
Dog
Tail
Heap
Durante un GC
Ejemplo WeakReference
Kennel.dogCache
WeakReference
null
Heap
Después del GC
Problemas comunes
(y como evitarlos)
Memory leak
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size== 0)
thr...
Memory leak
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size== 0)
thr...
Memory leak
public Object pop() {
if (size== 0)
throw new EmptyStackException();
Object result = elements[--size];
element...
Clases miembro
public class MySet<E> extends AbstractSet<E> {
... // otros métodos de la clase
public Iterator<E> iterator...
Clases miembro
public class MySet<E> extends AbstractSet<E> {
... // otros métodos de la clase
public Iterator<E> iterator...
Clases miembro
public class MySet<E> extends AbstractSet<E> {
... // otros métodos de la clase
public Iterator<E> iterator...
Otro Memory Leak
static Vector vector = new Vector():
...
for (int n = count-1; n > 0; n--) {
vector.removeElementAt(n);
}...
Otro Memory Leak
static Vector vector = new Vector():
...
for (int n = count-1; n > 0; n--) {
vector.removeElementAt(n);
}...
Otro Memory Leak
static Vector vector = new Vector():
...
vector.clear();
...
Nonlocal Instance Field
public class Storer {
private Map<Integer, String> hm =
new HashMap<>();
private void doSomething(...
Nonlocal Instance Field
public class Storer {
private Map<Integer, String> hm =
new HashMap<>();
private void doSomething(...
Referencias olvidadas
Reader reader = new Reader();
button.addActionListener(reader);
try {
reader.readSomething();
} catc...
Referencias olvidadas
Reader reader = new Reader();
button.addActionListener(reader);
try {
reader.readSomething();
button...
Referencias olvidadas
Reader reader = new Reader();
button.addActionListener(reader);
try {
reader.readSomething();
button...
Referencias olvidadas
Reader reader = new Reader();
button.addActionListener(reader);
try {
reader.readSomething();
} catc...
Referencias fuertes
class HashMetaData {
private Map<SSLSocket, InetAddress> m =
Collections.synchronizedMap( new HashMap<...
Referencias fuertes
class HashMetaData {
private Map<SSLSocket, InetAddress> m =
Collections.synchronizedMap( new WeakHash...
Referencias fuertes
class HashMetaData {
private Map<WeakReference<SSLSocket>, InetAddress>
m = Collections.synchronizedMa...
Referencias fuertes
public void storeTempConn(SSLSocket sock,
InetAddress ip) {
WeakReference<SSLSocket> wr;
while((wr = (...
Referencias fuertes
public void storeTempConn(SSLSocket sock,
InetAddress ip) {
SoftReference<SSLSocket> sr;
while((sr = (...
¿ Preguntas ?
Bibliografía
Efective Java Second Edition - Joshua Bloch
Java Platform Performance - Steve Wilson, Jeff Kesselman
Java Per...
Upcoming SlideShare
Loading in …5
×

of

Garbage Collection en el JVM Slide 1 Garbage Collection en el JVM Slide 2 Garbage Collection en el JVM Slide 3 Garbage Collection en el JVM Slide 4 Garbage Collection en el JVM Slide 5 Garbage Collection en el JVM Slide 6 Garbage Collection en el JVM Slide 7 Garbage Collection en el JVM Slide 8 Garbage Collection en el JVM Slide 9 Garbage Collection en el JVM Slide 10 Garbage Collection en el JVM Slide 11 Garbage Collection en el JVM Slide 12 Garbage Collection en el JVM Slide 13 Garbage Collection en el JVM Slide 14 Garbage Collection en el JVM Slide 15 Garbage Collection en el JVM Slide 16 Garbage Collection en el JVM Slide 17 Garbage Collection en el JVM Slide 18 Garbage Collection en el JVM Slide 19 Garbage Collection en el JVM Slide 20 Garbage Collection en el JVM Slide 21 Garbage Collection en el JVM Slide 22 Garbage Collection en el JVM Slide 23 Garbage Collection en el JVM Slide 24 Garbage Collection en el JVM Slide 25 Garbage Collection en el JVM Slide 26 Garbage Collection en el JVM Slide 27 Garbage Collection en el JVM Slide 28 Garbage Collection en el JVM Slide 29 Garbage Collection en el JVM Slide 30 Garbage Collection en el JVM Slide 31 Garbage Collection en el JVM Slide 32 Garbage Collection en el JVM Slide 33 Garbage Collection en el JVM Slide 34 Garbage Collection en el JVM Slide 35 Garbage Collection en el JVM Slide 36 Garbage Collection en el JVM Slide 37 Garbage Collection en el JVM Slide 38 Garbage Collection en el JVM Slide 39 Garbage Collection en el JVM Slide 40 Garbage Collection en el JVM Slide 41 Garbage Collection en el JVM Slide 42 Garbage Collection en el JVM Slide 43 Garbage Collection en el JVM Slide 44 Garbage Collection en el JVM Slide 45 Garbage Collection en el JVM Slide 46 Garbage Collection en el JVM Slide 47 Garbage Collection en el JVM Slide 48 Garbage Collection en el JVM Slide 49 Garbage Collection en el JVM Slide 50 Garbage Collection en el JVM Slide 51 Garbage Collection en el JVM Slide 52 Garbage Collection en el JVM Slide 53 Garbage Collection en el JVM Slide 54 Garbage Collection en el JVM Slide 55 Garbage Collection en el JVM Slide 56 Garbage Collection en el JVM Slide 57 Garbage Collection en el JVM Slide 58 Garbage Collection en el JVM Slide 59 Garbage Collection en el JVM Slide 60 Garbage Collection en el JVM Slide 61 Garbage Collection en el JVM Slide 62 Garbage Collection en el JVM Slide 63 Garbage Collection en el JVM Slide 64 Garbage Collection en el JVM Slide 65
Upcoming SlideShare
Junho jardim
Next
Download to read offline and view in fullscreen.

268 Likes

Share

Download to read offline

Garbage Collection en el JVM

Download to read offline

¿Cómo funciona el Garbage collector? ¿Por que se sigue esta técnica para administrar la memoria en el JVM?¿Qué errores de código pueden afectar al GC?

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Garbage Collection en el JVM

  1. 1. Garbage Collector Conociendo el manejo de memoria en el JVM @SuperSerch
  2. 2. ¿Qué ocurre en la memoria?
  3. 3. ¿Qué ocurre en la memoria?
  4. 4. ¿Qué ocurre en la memoria?
  5. 5. ¿Qué ocurre en la memoria?
  6. 6. ¿Qué ocurre en la memoria?
  7. 7. ¿Qué ocurre en la memoria?
  8. 8. ¿Qué ocurre en la memoria?
  9. 9. ¿Qué ocurre en la memoria?
  10. 10. Retos al administrar la memoria Velocidad de asignación ( velocidad de creación de objetos ) Seguimiento de objetos y valores vivos Seguimiento del espacio vacío Fragmentación de la memoria
  11. 11. JVMS: 2.5.3 Heap The heap is created on virtual machine start-up. Heap storage for objects is reclaimed by an automatic storage management system (known as a garbage collector); objects are never explicitly deallocated. The Java Virtual Machine assumes no particular type of automatic storage management system, and the storage management technique may be chosen according to the implementor's system requirements. The heap may be of a fixed size or may be expanded as required by the computation and may be contracted if a larger heap becomes unnecessary. The memory for the heap does not need to be contiguous.
  12. 12. JVMS: 2.5.3 Heap The heap is created on virtual machine start-up. Heap storage for objects is reclaimed by an automatic storage management system (known as a garbage collector); objects are never explicitly deallocated. The Java Virtual Machine assumes no particular type of automatic storage management system, and the storage management technique may be chosen according to the implementor's system requirements. The heap may be of a fixed size or may be expanded as required by the computation and may be contracted if a larger heap becomes unnecessary. The memory for the heap does not need to be contiguous. If a computation requires more heap than can be made available by the automatic storage management system, the Java Virtual Machine throws an OutOfMemoryError.
  13. 13. Hipótesis Generacional Hipótesis generacional debil La mayoría de los objetos mueren jovenes 80% - 95% de los objetos en 1MB mueren antes de que se llene el siguiente MB 95% de los objetos Java son de corta vida
  14. 14. Memoria generacional PermGen (jdk8-nativo) Old Gen Young Gen
  15. 15. Young Gen
  16. 16. Young Gen Eden Survivor Spaces From To⇄
  17. 17. Allocation
  18. 18. Allocation
  19. 19. Allocation From To
  20. 20. Allocation From To
  21. 21. Allocation To From
  22. 22. Allocation To From
  23. 23. Allocation From To
  24. 24. Promotion From To No hay espacio suficiente
  25. 25. Promotion From To Old Generation
  26. 26. Colectores en Oracle JVM Serial Garbage Collector Parallel Garbage Collector Concurrent Mark-Sweep Garbage Collector G1 Garbage Collector (Garbage 1srt)
  27. 27. Serial Garbage Collector Compactación por deslizamiento, con una pausa stop-the-world Util para ambientes con 1 virtual core o en ambientes donde varias JVMs comparten el mismo hardware Para Heaps en el orden de MBs Pausas posiblemente largas App App AppGC GC
  28. 28. Parallel Garbage Collector Compactación por deslizamiento, con una pausa stop-the-world utiliza todos los núcleos disponibles Alto throughput Para Heaps en el orden de GBs App App AppGC GC
  29. 29. Concurrent Mark-Sweep Garbage Collector Diseñado para tener un tiempo de respuesta consistente Hace gran parte del trabajo de limpiar Old Gen concurrente a la aplicación Si se acaba el espacio antes de que CMS pueda limpiar, ocurre una SWP y limpia en paralelo Require un Heap mas grande App App AppIM RM SW
  30. 30. G1 Garbage Collector (Garbage 1srt)
  31. 31. G1 Garbage Collector (Garbage 1srt)
  32. 32. G1 Garbage Collector (Garbage 1srt)
  33. 33. G1 Garbage Collector (Garbage 1srt)
  34. 34. G1 Garbage Collector (Garbage 1srt)
  35. 35. G1 Garbage Collector (Garbage 1srt) Paralelo, concurrente e incremental Pausas cortas y alto throughput Divide el heap en regiones Cada región puede cambiar de rol según se requiera al momento Remplazo a largo tiempo del CMS, en JDK9 es el GC por defecto App App AppGC GC
  36. 36. ¿Cuándo un Objeto es basura? Un objeto es elegible para ser colectado cuando desde ningún GC Root de la jvm se puede alcanzar con una referencia fuerte al objeto Referencia fuerte (Variable en alcance) GC Root de la jvm
  37. 37. GC Roots de la JVM Variables locales (stack) Threads activos Variables estáticas Referencias JNI GC Roots Objetos Alcanzables Objetos NO Alcanzables
  38. 38. Tipos de Referencias Fuerte Suave ( SoftReference ) Debil ( WeakReference ) Fantasma ( PhantomReference )
  39. 39. Ejemplo WeakReference WagTask.run Kennel.dogCache WeakReference Dog Tail Stack Heap
  40. 40. Ejemplo WeakReference WagTask.run Kennel.dogCache WeakReference Dog Tail Stack Heap El Thread se muere
  41. 41. Ejemplo WeakReference Kennel.dogCache WeakReference Dog Tail Heap Durante un GC
  42. 42. Ejemplo WeakReference Kennel.dogCache WeakReference null Heap Después del GC
  43. 43. Problemas comunes (y como evitarlos)
  44. 44. Memory leak public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size== 0) throw new EmptyStackException(); return elements[--size]; }
  45. 45. Memory leak public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size== 0) throw new EmptyStackException(); return elements[--size]; }
  46. 46. Memory leak public Object pop() { if (size== 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; return result; }
  47. 47. Clases miembro public class MySet<E> extends AbstractSet<E> { ... // otros métodos de la clase public Iterator<E> iterator() { return new MyIterator(); } private class MyIterator implements Iterator<E> { ... } }
  48. 48. Clases miembro public class MySet<E> extends AbstractSet<E> { ... // otros métodos de la clase public Iterator<E> iterator() { return new MyIterator(); } private class MyIterator implements Iterator<E> { ... } }
  49. 49. Clases miembro public class MySet<E> extends AbstractSet<E> { ... // otros métodos de la clase public Iterator<E> iterator() { return new MyIterator(); } private class MyIterator implements Iterator<E> { ... } } static
  50. 50. Otro Memory Leak static Vector vector = new Vector(): ... for (int n = count-1; n > 0; n--) { vector.removeElementAt(n); } ...
  51. 51. Otro Memory Leak static Vector vector = new Vector(): ... for (int n = count-1; n > 0; n--) { vector.removeElementAt(n); } ... >=
  52. 52. Otro Memory Leak static Vector vector = new Vector(): ... vector.clear(); ...
  53. 53. Nonlocal Instance Field public class Storer { private Map<Integer, String> hm = new HashMap<>(); private void doSomething() { // hm sólo se usa aquí hm.put(1, "java"); // … } }
  54. 54. Nonlocal Instance Field public class Storer { private Map<Integer, String> hm = new HashMap<>(); private void doSomething() { // hm sólo se usa aquí hm.put(1, "java"); // … } }
  55. 55. Referencias olvidadas Reader reader = new Reader(); button.addActionListener(reader); try { reader.readSomething(); } catch (IOException e) { // se maneja la excepción } // Ya no se usa reader
  56. 56. Referencias olvidadas Reader reader = new Reader(); button.addActionListener(reader); try { reader.readSomething(); button.removeActionListener(reader); } catch (IOException e) { // se maneja la excepción } // Ya no se usa reader
  57. 57. Referencias olvidadas Reader reader = new Reader(); button.addActionListener(reader); try { reader.readSomething(); button.removeActionListener(reader); } catch (IOException e) { // se maneja la excepción } // Ya no se usa reader
  58. 58. Referencias olvidadas Reader reader = new Reader(); button.addActionListener(reader); try { reader.readSomething(); } catch (IOException e) { // se maneja la excepción } finally { button.removeActionListener(reader); } // Ya no se usa reader
  59. 59. Referencias fuertes class HashMetaData { private Map<SSLSocket, InetAddress> m = Collections.synchronizedMap( new HashMap<>()); public void storeTempConn(SSLSocket sock, InetAddress ip) { m.put(sock, ip); } pubic void removeTempConn(SSLSocket sock) { m.remove(sock); } }
  60. 60. Referencias fuertes class HashMetaData { private Map<SSLSocket, InetAddress> m = Collections.synchronizedMap( new WeakHashMap<>()); public void storeTempConn(SSLSocket sock, InetAddress ip) { m.put(sock, ip); } pubic void removeTempConn(SSLSocket sock) { m.remove(sock); } }
  61. 61. Referencias fuertes class HashMetaData { private Map<WeakReference<SSLSocket>, InetAddress> m = Collections.synchronizedMap( new HashMap<>()); ReferenceQueue queue = new ReferenceQueue(); ...
  62. 62. Referencias fuertes public void storeTempConn(SSLSocket sock, InetAddress ip) { WeakReference<SSLSocket> wr; while((wr = (WeakReference) queue.poll) != null){ //... m.remove(wr); } wr = new WeakReference<>(sock, queue); m.put(wr, ip); } ...
  63. 63. Referencias fuertes public void storeTempConn(SSLSocket sock, InetAddress ip) { SoftReference<SSLSocket> sr; while((sr = (SoftReference) queue.poll) != null){ //... m.remove(sr); } sr = new SoftReference<>(sock, queue); m.put(sr, ip); } ...
  64. 64. ¿ Preguntas ?
  65. 65. Bibliografía Efective Java Second Edition - Joshua Bloch Java Platform Performance - Steve Wilson, Jeff Kesselman Java Performance - Charlie Hunt, Binu John The CERT Oracle Secure Coding Standard For Java - Fred Long, Dhruv Mohindra, Robert C. Seacord, Dean F Sutherland, David Svoboda
  • Miladhagigi

    Jan. 25, 2020
  • romit24

    Jan. 7, 2020
  • igbins2g

    Dec. 20, 2019
  • dailyfruitwine

    Dec. 20, 2019
  • Nancypossujimenez

    Dec. 12, 2019
  • dogmaskid

    Dec. 7, 2019
  • DeepanshuLuthra2

    Dec. 7, 2019
  • GeorgiaLewis14

    Dec. 4, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • AbdoulayeTine1

    Dec. 3, 2019
  • KingDy

    Dec. 2, 2019
  • JuinbJuin1

    Nov. 22, 2019
  • mariacarolinapalenciatorres

    Nov. 1, 2019
  • CarlosPoncedeLenPand

    Oct. 15, 2019
  • Sonialucia4

    Oct. 11, 2019

¿Cómo funciona el Garbage collector? ¿Por que se sigue esta técnica para administrar la memoria en el JVM?¿Qué errores de código pueden afectar al GC?

Views

Total views

63,326

On Slideshare

0

From embeds

0

Number of embeds

568

Actions

Downloads

252

Shares

0

Comments

0

Likes

268

×