jvm 内存说明

(一) JVM内存布局

jvm主要包含下面几个部分:

1. Java Virtual Machine Stack: 也就是我们常见的局部变量栈,线程私有,保存线程执行的局部变量表、操作栈、动态连接等。

2. Java Heap:我们最常打交道的内存区域,几乎所有对象的实例都在这个区域分配,是被所有线程共享的一块内存区域。所谓的GC基本上也就是跟这个区域打交道。

3. Method Area:包含被虚拟机加载的类、常量、静态变量等数据。Method area在所有线程中共享。JVM的垃圾回收机制(GC)不回收method area内存块, method area数据放在heap的Permanent区。

4. Native Method Stacks局部方法栈, 与Java Virtual Machine Stack栈类似,保存native Mathod。

Java heap是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。Java Heap分为3个区1.Young 2.Old 3.Permanent

其中:Permanent(永生代)基本上等价于Method Area,也就是说其中包含的数据在jvm进程存活期间会一直存在,一般不会发生变化。

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象。

新生代和老生代位于Java heap中,是垃圾收集器主要处理的内存区域。

(二) GC的触发条件

· YGC/YGCT: Young GC次数和总耗费时间。Young GC也就是Minor GC,新生代中内存不够时触发,通常采用复制算法进行,回收速度较快,对系统的影响较小。

· FGC/FGCT:Full GC次数和总耗费时间。Full GC是在java heap空间不足(包括New和Old区域)时触发,会分别清理新生代、老生代,通常耗时较长,对系统有较大影响,应该尽量避免。

· GCT:GC总耗时。

你可能感兴趣的:(java)