1 介绍
作为一名Java开发者,可能会优先考虑到堆内存,因为JVM会自动在堆内存中进行对象分配和释放。但是作为一名优秀的Java开发者,要意识到:基于JVM的应用中,堆内存 可以使用,但同时堆外内存也可以使用。
要根据使用场景,将对象存储在堆内存中或者堆外内存中。
JVM的架构如下:
2. 堆内存
堆内存切割成如下区域:
Heap:
- young generation
eden
survival0
survival1 - old generation
oil generation
新创建的类实例首先在young generation的eden区域,如果在垃圾回收后,仍然被使用,会晋升到下一个区域。
最后,如果是长生命周期的对象,会移动到old generation。old generation区域是很少发生垃圾回收的,但是易产生
影响的stop-the-word事件。
- 堆内存是JVM中的一块内存,可以被所有线程共享。
- 堆内存是在JVM启动时创建,堆内存中分配的对象可以被垃圾回收