标签:
java的内存结构:
1. 堆: java所有通过new新建的对象都是在堆上进行分配的; 根据不同的垃圾回收算法, 堆的结构也不相同, 如果采用的是分代垃圾回收, 那么堆就分为年轻代和年老代两部分.
2. 栈: 每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果
3. 本地方法栈: 用于存放native方法的执行状态
4. 方法区: 存放了已加载的类信息、静态变量、final类型的常量、属性和方法信息以及JIT编译后的代码。JVM用持久代(PermanetGeneration)来存放方法区
java线程私有的部分: 程序计数器, java虚拟机栈, 本地方法栈
java线程共享的部分: java堆, 方法区, 运行时常量池(也是方法区的一部分, 用于存放编译时生成的各种字面值和符号引用), 直接内存(例如: NIO的directBuffer申请的内存和native方法申请的内存)
stop-the-world : jvm停止应用程序, 而去进行垃圾回收; 当stop-the-world发生时, 除了垃圾回收的线程之外, 其他所有线程都将停止直到gc完成.
gc调优就是为了减少stop-the-world的时间和次数.
垃圾回收算法:
1. mark-sweep算法(标记-清理算法)
1. 标记: 将所有需要回收的对象标记出来
2. 清理: 回收所有标记对象的内存空间
会产生内存碎片问题(需要的压缩(将存活对象移动到一端)来解决)
2. copying算法(复制算法)
1. 将内存按容量划分为大小相同的两块, 每次只使用其中的一块, gc发生时, 将存货的对象复制到另外一块
无内存碎片, 但是内存利用率低, 而且当存活对象较多时, copying的效率很低
3. mark-compact算法(标记-整理算法)
1. mark: 标记
2. compact: 不清理可回收对象, 而是将存活对象向一端移动, 对可回收对象进行覆盖, 然后将边界外的所有内存进行清理
4. 分代垃圾回收算法
分代垃圾回收基于两个前提:
1. 绝大多数对象的存活期都很短, 都会在短时间内变得不可达
2. 只有少量年老对象会引用年轻对象
永生代(permanent generation) : 也称方法区, 存储class对象与字符串常量, 发生在这里的gc也称为major gc
年轻代(young generation) : 绝大多数新创建的对象都分配在这里, 基于前面的两个前提, 绝大多数年轻代对象都会在一段时间后消失. 当对象从年轻代消失, 就称发生了一次minor gc. 年轻代的组成: 1. eden区: 绝大多数新创建的对象都分配在eden区 ; 2. 两块survivor区 : 在eden发生一次gc, 将存活对象移动到survivor区, 一旦一个survivor区满, 就将存活对象转移到另一块survivor区. 一段时间后, 将survivor中存货的对象转移到年老区.(copying算法)
年老代(old generation) : 在年轻代没有变得不可达的对象会转移到年老代; 或者需要内存较大的对象会直接分配在年老代; 年老代的内存要比年轻代大得多; 年老代发生的gc也称为major gc或full gc.
年老代的garbage collector:
1. serial收集器: 串行gc, 适用于单cpu, 新生代空间较小, 对暂停时间要求不高的应用上, 是client端的默认gc, 不能用于server端. 使用mark-compact算法.
2. parallel scavenge收集器: 并行gc, 使用多线程并行处理gc, 适用于多cpu, 对暂停时间要求较高的应用, 是server端的默认收集器, 使用copying算法
3. parallel old收集器: 与parallel scavenge收集器的唯一区别是使用的算法不同, 他使用的是mark-compact算法
4. cms收集器: 拥有更短的stop-the-world时间, 但会占用更多的cpu与内存, 默认是不支持压缩步骤
5. g1收集器: 每个对象都分配在不同的网格中, 当一个网格填满后, 对象会被移动到另一个区域, 并执行一次垃圾回收. 它比任何其他gc算法都要快, 是一种前沿的gc.
//http://www.cnblogs.com/dolphin0520/p/3783345.html
//http://www.cnblogs.com/laoyangHJ/articles/java_gc.html
//http://blog.jobbole.com/80499/
标签:
原文地址:http://www.cnblogs.com/iamzhoug37/p/5675476.html