Java虚拟机内存分配策略
2015-08-22 14:14
435 查看
1.JVM内存分配分区
Java的内存简单分为堆内存和非堆内存其中堆内存又可以分为新生代和老年代
新生代分为1个Eden区和2个Survivor区,如下图:
2.JVM垃圾回收种类
分为2种,MinorGC和FullGC.MinorGC针对新生代的内存回收,时间较短,经常发生。
FullGC针对老年代的回收,通常伴随MinorGC,耗费时间较久,较少发生。
3.JVM内存分配策略
(1)先在Eden区分配,如果不够分配的话,发生MinorGC。(2)进行MinorGC时,会把Eden中有在使用的对象放到其中一个Survivor中。如果Survivor中放不下,则会进入老年代。
(3)每次进行MinorGC时,在Survivor中存活的对象会增加1岁,默认超过15岁的对象(MaxTenuringThreshold),会进入老年代。
(4)JVM的参数有一个叫PretenureSizeThreshold,大小超过这个值的对象会直接进入老年代。
4.垃圾回收器种类
Serial/Serial Old
(1)适合单个CPU(2)Serial采用复制算法,适合新生代
(3)Serial Old采用标记-整理算法,适合老年代
ParNew
(1)多线程,并行Parallel Scavenge
(1)适合新生代,并行(2)适合后台运算的任务,追求的是吞吐量,支持参数自适应
Parallel Old
(1)适合老年代,与Parallel Scavenge搭配使用CMS(Consurrent Mark Sweep)
(1)追求短停顿,采用标记-清除算法(2)无法处理浮动垃圾
(3)要求CPU较多
G1
(1)并行+并发(2)分代采用不同算法进行收集
(3)标记整理+复制算法
(4)可预测停顿时间
相关文章推荐
- 【Java 陷阱】SimpleDateFormat 时间格式化多线程异常
- 用Eclipse建spring mvc项目(图解)
- Myeclipse快捷键介绍
- struts2 jar包说明
- 从eclipse运行UiAutomator的方法,告别cmd
- How to run java and junit in command line
- java Map,Set,List的区别
- Javamail发送邮件的简单实例
- java中的equals和==
- java 对象和引用
- java 访问权限控制
- java中的hashcode方法
- Java 内存划分
- java的异常处理
- JFrame, JPanel, JComponent
- java中的装箱和拆箱
- 使用包内资源
- java 如何有效的避免OOM
- java 字节流和字符流的区别
- Spring Autowiring by AutoDetect