El documento trata sobre el manejo de memoria en el JVM. Explica los conceptos básicos como el heap, la hipótesis generacional, los diferentes tipos de colectores de basura como el Serial GC, Parallel GC, CMS GC y G1 GC. También cubre temas como los GC roots, tipos de referencias como weak y soft references, y el ciclo de recolección del nuevo ZGC.
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. 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. If a computation requires more heap than can be made available
by the automatic storage management system, the Java Virtual
Machine throws an OutOfMemoryError.
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.
JVMS: 2.5.3 Heap
13. Hipótesis Generacional
Hipótesis generacional
La mayoría de los objetos mueren jóvenes
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
26. ¿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
27. GC Roots de la JVM
Threads activos
Variables locales
(stack)
Variables estáticas
Referencias JNI GC Roots
Objetos
Alcanzables
Objetos NO
Alcanzables
28. Colectores en Oracle JVM
Serial Garbage Collector
Parallel Garbage Collector
Concurrent Mark-Sweep Garbage Collector
G1 Garbage Collector (Garbage 1srt)
Z Garbage Collection (JDK 11)
29. 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
30. Parallel Garbage Collector
Compactación por
deslizamiento, con una pausa
stop-the-world
utiliza todos los núcleos
disponibles
Alto throughput
Para Heap’s en el orden de GBs
App App AppGC GC
31. 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
32. G1 Garbage Collector (Garbage 1srt)
Paralelo, concurrente e incremental
Pausas cortas (200ms) y alto
throughput
Divide el heap en regiones
Cada región puede cambiar de rol
según se requiera al momento
Remplazo del CMS, a partir del JDK9
es el GC por defecto
App App AppGC GC
38. Z Garbage Collector (JDK 11*)
Concurrente
Divide el heap en regiones
Pausas que no exceden 10ms
Tiempo de pausas no
incrementa con el tamaño del
Heap
NUMA-aware
Usa punteros coloreados
Utiliza load barriers (~4%)
Para Heap’s con tamaños desde
Megabytes hasta Terabytes
Solo una generación*
Tiempo de pausas incrementa
al incrementar los GC Roots
39. ZGC Cycle
Pause Mark Start Pause Mark End Pause Relocate Start
Concurrent
Mark/Remap
Concurrent
prep. relocation
Concurrent
Relocate
40. Colored Pointers & Load Barriers
Object address (44bits - 16 TB address space)Unused (16 bits)
Metadata
Puntero a un Objeto (64 Bits)
Object o = obj.fieldA;
<Load Barrier>
-No es el color correcto?
-Realizar los ajustes
<Load Barrier>
…