Java虚拟机(Java Virtual Machine, 缩写JVM)
Java程序内存主要分为:堆和非堆;
JVM管理堆和非堆。堆是运行时数据区域(所有类实例和数组的内存均从此处分配)非堆是JVM自用的内存区域(分为1.方法区 2.JVM内部处理或优化所需的内存 3. 每个类结构,方法和构造器的代码存储区)
GC(Garbage Collection 垃圾收集器)Java垃圾回收机制是由GC来实现的,GC是后台的守护进程。它的特别之处是它是一个低优先级进程,但是可以根据内存的使用情况动态的调整它的优先级。因此,它是在内存中低到一定限度时才会自动运行,从而实现对内存的回收。这就是垃圾回收的时间不确定的原因。GC主要回收的内存是堆中的。
堆内存
堆内存分为:新生代(NewGeneration)和老年代(OldGeneration)其大小比为1:2
新生代内分为:一个Eden区和两个Survivor区(分别叫from,to)其比例为Eden : from : to = 8 : 1 : 1
新生代内存活对象少其GC:复制(copying) 算法
老年代内存活对象多其GC:标记-整理(Mark-Compact)算法
新生代和老年代GC:分代收集算法
GC_FOR_MALLOC:表示是在堆上分配对象时内存不足触发的GC
GC_CONCURRENT:当我们的应用程序的堆内存达到一定量,或者可以理解为快要满的时候系统会自动触发的释放内存的GC操作
GC_EXPLICIT:表示是应用程序调用System.gc, VMRuntime.gc接口或者收到SIGUSRI信号时触发的GC
GC_BEFORE_OOM:表示是在准备抛OOM异常之前进行的最后努力而触发的GC
网友评论