根据网络资料优化整理
常用虚拟机 hotport JRockit IBMJVM
Jdk 默认的oracle 的hotport (常用)
GC 使程序员可以不必关注内存
大型软件开发和检查内存泄露和溢出,解决性能瓶颈,提高并发,使程序更加高效还是要了解GC机制;
Java内存区:
1:程序计数器(小)行号指示器
线程私有,每个线程对应一个计数器
2:栈 statck
线程私有,每个线程对应一个栈
2.1 虚拟机栈 栈帧 方法调用 入栈,执行完成,出栈;
2.2 本地方法栈
3:堆 heap(最重要的区域,内存分配主要指堆)
线程共享区域
机制:分代分配,分代回收
OutOfMemoryError:Java heap space
3.1 年轻代 经常GC
采用停止-复制算法 YongGC
Eden (内存连续空间)创建新对象,98%很快消亡,满了GC
Survivor0
Survivior1 必须有一个是空白的
8:1:1
活了15次copy年老代(hotport)
如果分配 survivor大于 10% 多于分配到年老代
3.2 年老代 GC次数比年轻代少
对象大大多于年轻代,大对象
采用标记—整理算法 Full GC
标记存活对象,向一端移动,保证内存连续;
yongGC时虚拟机检查 进入年老代的大小是否大于剩余空间,如果大于进行FullGC
4:方法区(永久代)
OutOfMemoryError:Permgen Space
线程共享区域
存储已经被虚拟机加载的类信息,final常量,静态变量,编译的代码
很少GC
常用两种
回收没有引用的常量;
回收卸载已加载的无用类;
5:直接内存
除jvm之外的内存
垃圾回收器来做GC,GC的具体实现;实现上述算法;