JVM之---GC内存分配
来源:互联网 发布:下载神圣计划软件 编辑:程序博客网 时间:2024/05/16 12:36
一、基础知识
1.根搜索算法(GC Roots Tracing)
可作为GC roots的对象:
(1)栈帧中局部变量表中引用的对象
(2)方法区中类静态变量引用的对象
(3)方法区中常量引用的对象
(4)JNI引用的对象
2.引用
分为:
(1)强引用
Object obj = new Object();只要强引用存在,永远不会被回收
(2)软引用
还有用,但并非必须的对象,在系统将要发生内存溢出异常之前回收
(3)弱引用
只能生存到下一次GC之前
(4)虚引用
无法取得对象实例
3.垃圾收集算法
(1)Eden,两个Survivor使用复制算法(copying)
HotSpot默认Eden和其中一块Survivor比例是8:1。每次使用Eden和其中一块Survivor,回收时,将这两个区存活的对象一次性拷贝到另一个survivor区中,然后清除这两个区的空间。当第二块survivor空间不够时,将对象通过分配担保机制进入老年代
(2)老年代使用标记-整理算法(mark-compact)
首先标记需要回收的对象,标记完成后统一回收,注意是统一。然后将对象向前移动,清除端边界以外的内存。
(3)标记-清除算法(mark-sweep)
现在CMS使用的算法
二、垃圾回收
1.垃圾收集器
1.1 Serial收集器
(1)单线程收集器,Client模式默认新生代收集器
(2)工作时必须暂停其他所有工作线程
优点:单个CPU情况下简单高效,专注于做垃圾收集而没有其他线程开销
缺点:不说了
1.2 ParNew收集器
(1)Serial收集器的多线程版本,Server模式下首选
(2)唯一能和老年代CMS收集器交互的收集器
(3)多CPU首选
1.3 CMS收集器
(1)并发执行
(2)标记-清除算法,碎片较多。往往被迫提前进行Full GC
1.4 G1收集器
标记-整理算法,JDK 1.6开始有
2.内存分配回收策略
2.1 对象优先在Eden区分配
当Eden没有足够空间时发起Minor GC
2.2 大对象直接进入老年代
很长的字符串和数组
2.3 长期存活的对象直接进入老年代
JVM给每个对象一个年龄计数器,在Survivor区每经过一次Minor GC存活就增加一岁,默认15岁晋级到老年代
- JVM之---GC内存分配
- JVM内存分配与GC
- JVM GC 之二对象分配
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- JVM内存分配之二
- JVM之堆内存分配
- JVM中的内存分配及GC回收过程简单整理
- jvm GC收集器与内存分配策略
- JVM初探- 内存分配、GC原理与垃圾收集器
- JVM初探- 内存分配、GC原理与垃圾收集器
- JVM初探- 内存分配、GC原理与垃圾收集器
- JVM 初探:内存分配、GC 原理与垃圾收集器
- JVM初探- 内存分配、GC原理与垃圾收集器
- JVM初探- 内存分配、GC原理与垃圾收集器
- Java(六) JVM内存分配策略和GC
- [jvm]GC 垃圾收集和内存分配 -- 待续
- JVM中的内存分配及GC回收过程简单整理
- JVM内存调优之GC算法
- 使用PC-lint
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
- org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exc
- 知识产权保护案例分析----CodeMeter在刺绣机行业中的运用
- 使用HttpUrlConnection进行post 提交
- JVM之---GC内存分配
- gpio分析
- Ununtu 下安装GooglePinyin输入法
- 调用系统的裁剪功能裁剪图片
- ibatis的cacheModel
- Extjs-数据存储与传输-几种Store
- Python递归展开嵌套的list
- js 数字,金额 用逗号 隔开。数字格式化
- NLS_SORT设置