java gc小结
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端. 年轻代使用copy算法(serial收集器, 年老代使用mark-compact算法(serial old收集器).
2. parallel scavenge收集器: 并行gc, 使用多线程并行处理gc, 适用于多cpu, 对暂停时间要求较高的应用, 是server端的默认收集器, 使用copying算法
3. parallel old收集器: 与parallel scavenge收集器的唯一区别是使用的算法不同, 他使用的是mark-sweep算法
4. cms收集器: 使用mark-sweep算法, 拥有更短的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/
java gc小结的更多相关文章
- [Java基础]-- Java GC 垃圾回收器的分类和优缺点
https://blog.csdn.net/high2011/article/details/80177473?utm_source=blogxgwz2 参考:elasticsearch实战-使用G1 ...
- 面试官,不要再问我“Java GC垃圾回收机制”了
Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...
- 详解Java GC的工作原理+Minor GC、FullGC
详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...
- Java中文编码小结
Java中文编码小结 1. 只有 字符到字节 或者 字节到字符 的转换才存在编码转码; 2. Java String 采用 UTF-16 编码方式存储所有字符.unicode体系采用唯一的码点表示唯一 ...
- Java GC回收机制
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- JAVA GC 简单总结
GC分代 GC的英文全拼是Garbage Collection,意思是垃圾收集. Java 将堆内存分为三代来管理: - 年轻代 (Young Generation) - 年老代 (Old Gener ...
- Java GC收集器配置说明
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...
- java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互
java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...
- Java GC系列(4):垃圾回收监视和分析
本文由 ImportNew - lomoxy 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这个Java GC系列教程中,让我们学习 ...
随机推荐
- CSS3的writing-mode属性
writing-mode这个CSS属性以前是IE的独有属性,IE5.5浏览器就已经支持了.在很长一段时间里,FireFox, Chrome这些现代浏览器都不支持writing-mode,各大现代浏览器 ...
- base642photo
/** * pic to base64Str * @param path 读取路径 * @return */ public static String GetIm ...
- bzoj3238 [Ahoi2013]差异 后缀数组+单调栈
[bzoj3238][Ahoi2013]差异 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Ou ...
- python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...
- 'Add Solution': A timeout has occurred while invoking commands in SharePoint host process.
一.问题描述: 在部署SharePoint solution的时候,出现Time out 的问题,错误提示: Error occurred in deployment step 'Add Soluti ...
- loading上下左右居中
.loading { width: 50px; height: 60px; text-align: center; font-size: 10px; position:fixed; left:50%; ...
- 记一次安装centos7及gnome桌面
https://blog.csdn.net/bingbingtea/article/details/79553669
- SPOJ 1825 Free tour II (树的点分治)
题目链接 Free tour II 题意:有$N$个顶点的树,节点间有权值, 节点分为黑点和白点. 找一条最长路径使得 路径上黑点数量不超过K个 这是树的点分治比较基本的题,涉及树上启发式合并……仰望 ...
- Codeforces 553D Nudist Beach(二分答案 + BFS)
题目链接 Nudist Beach 来源 Codeforces Round #309 (Div. 1) Problem D 题目大意: 给定一篇森林(共$n$个点),你可以在$n$个点中选择若干个构 ...
- 基于sklearn的分类器实战
已迁移到我新博客,阅读体验更佳基于sklearn的分类器实战 完整代码实现见github:click me 一.实验说明 1.1 任务描述 1.2 数据说明 一共有十个数据集,数据集中的数据属性有全部 ...