Java 内存模型之堆内存(Heap)
一、背景知识:内存类型介绍

1、什么是 Perm Gen?
Perm Gen : Permanent Generation
Perm Gen 区是一个特殊的JVM内存区,因为它用来存储用来描述 Class 的
元数据(Class 可以不属于Java语言的一部分,也可以属于),诸如:描述类及其方法。
在大的应用中该区一会儿就满了,并抛出错误:java.lang.OutOfMemoryError: PermGen
然而无论你怎么设置 -Xmx 也不管用。
因为设置其大小的参数不是 -Xmx,而是 -XX:PermGen, -XX:MaxPermGen (不同Java版本略有变化)
2、Heap VS. Stack VS. Perm
Heap(堆内存):
使用Java语言创建的所有的引用对象类型,都在此存储。并由 GC (Garbage Collection)对其进行管理,
诸如:释放不再被程序引用的对象所占据的内存。
Stack(栈内存):
与 Heap 相对的是,Stack 存放基础数据类型。诸如:int, char 等。
由程序的执行顺序控制变量的进出栈顺序,而不是由 GC 控制栈内存的管理。
Perm(持久内存):
用于存储类的元数据。诸如:类的定义,方法的定义等。
Perm 的生命周期与 JVM 绑定,而 Heap 的生命周期与程序绑定。
二、堆内存(Heap) 与 Garbage Collection
理解 GC (Garbage Collection),需要理解 Heap 。
JVM 的 Heap 堆内存在物理上被划分为两部分:Young Gen, Old Gen
1、 JVM 内存管理之:Young Gen
所有新创建的 Object 首先被放在 Young Generation 内存区。
如果 Young Generation 内存区满了,则执行 Garbage Collection 。这种 GC 称为 Minor GC。
Y
原创不易,完成人机校验,阅读全文