JVM学习系列

Java 内存模型之堆内存(Heap)

一、背景知识:内存类型介绍 1、什么是PermGen? PermGen:PermanentGeneration PermGen区是一个特殊的JVM内存区,因为它用来存储用来描述Class的 元数据(Class可以不属于Java语言的一部分,也可以属于),诸如:描述类及其方法。 在大的应用中该区一会儿就满了,并抛出错误:java.lang.OutOf

一、背景知识:内存类型介绍 

2ab0af46ff557b77413975341836b66d.png

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

原创不易,完成人机校验,阅读全文

相关推荐