jvm内存分布基础知识
jvm分成5个部分:
虚拟机栈:存放调用java方法的相关数据,如局部变量,返回地址。
本地方法栈:存放调用本地方法的相关数据,如局部变量,返回地址。
程序计数器:存放当前线程运行到哪一行。
堆:存放对象的。只有这个区域才有CG。
直接内存:NIO中的DirectBuffer,直接使用的物理内存,即大小受本机总内存限制。
方法区:存放类信息,静态变量,常量等。
堆是垃圾回收的地方,又分成2个部分年轻代和老年代。年轻代又分成2个部分1个Eden区和2个survivor区。 新建的对象会创建在eden区,然后经过垃圾回收后,会移动到其中一个survior区,在下一次回收时,还在存活的对象又都会移动到另外一个survior区,经过15次还存活就会移动到老年代。也就是说同时只有1个survior区是有对象的。
老年代的gc叫major GC,年轻代的GC叫 young GC,全部区域回收叫full gc,这回引起所有正在运行的线程暂停,会导致响应变慢。