一、分代思想(年轻代、老年代、永久代):

1、一个新人(new对象)会优先在伊甸园(Eden区)出生,当伊甸园(Eden区)人口达到最大容量时,JVM会派MinorGC去看看哪些人还有价值

2、伊甸园(Eden区)和From区中有价值的孩子会进入到To区,接着清空伊甸园和Form区,再将To区乾坤大挪移变成From区,最后将这些有价值的孩子年龄增加1岁

3、人口不断增长,JVM频繁触发minorGC,有价值的小孩年龄逐渐变大,当达到法定年龄时(默认15次)会进入老年代,过上一段相对稳定的生活

4、进入老年代并不意味着就安全了,JVM会派MajorGC去看看哪些人没有价值了,没有价值的人就被清掉了

二、可达性分析算法之对象生死判官(GC ROOTS对象):

1、虚拟机栈(本地变量表)中引用的对象 

2、方法区的类静态属性引用的对象

3、方法区的常量引用的对象

4、本地方法栈JNI(Native方法)引用的对象

三、垃圾回收算法:

1、复制算法

将可用内存划分为大小相等的两块内存A、B,每次只用内存块A,当内存块A用完,将存活的对象复制到内存块B中,然后清空内存块

优点:垃圾回收后空间连续、无内存碎片、适合朝生夕死的对象

缺点:内存空间浪费、每次只能使用一半内存

2、标记清除算法

分成标记和清除两个阶段:标记出待回收的对象(可达性分析算法),清理掉所有待回收的对象

优点:不会损失50%的空间、可解决循环引用的问题

缺点:效率不高、会产生大量不连续的内存碎片

3、标记整理算法

首先标记出待回收的对象,将存活的对象都移动到一端,然后清理掉边界以外的内存

优点:不会损失50%的空间、回收后空间连续

缺点:效率不高

四、JVM参数:

-server JVM使用server模式(采用相对重量级,代号为C2的编译器. C2比C1编译器编译的相对彻底,服务起来之后,性能更高)
-Xms2048m 堆的最小值
-Xmx2048m 堆的最大值
-XX:PermSize=128M 方法区的大小
-XX:MaxDirectMemorySize=2048m 本机直接内存
-XX:MaxTenuringThreshold=15  晋升老年代的年龄
-XX:NewRatio=1 年轻代和老年代的比值
-XX:+UseConcMarkSweepGC  使用ParNew + CMS +  Serial Old的收集器组合进行内存回收,Serial Old作为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用
-XX:CMSInitiatingOccupancyFraction=75 设置CMS收集器在老年代空间被使用多少后触发
-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间
-XX:+PrintGCDetails 打印GC详细日志
-XX:+HeapDumpOnOutOfMemoryError JVM异常自动生成堆转储
-XX:HeapDumpPath= 堆转储文件名
-XX:-OmitStackTraceInFastThrow 禁用堆栈异常优化
-XX:-UseBiasedLocking 禁用偏向锁(在存在大量锁对象的创建并高度并发的环境下禁用偏向锁能够带来一定的性能优化)
-XX:AutoBoxCacheMax=20000 自动装箱和拆箱范围设置(节省了常用数值的内存开销和创建对象的开销,提高了效率)
-XX:+CMSParallelInitialMarkEnabled 开启初始标记过程中的并行化,进一步提升初始化标记效率

 
 

jvm垃圾回收(三)的更多相关文章

  1. JVM学习(三)JVM垃圾回收

    一.引用的分类 在了解JVM垃圾回收机制之前,了解一下对象的引用类型是非常必要的. 强引用:GC时不会被回收 软引用:描述有用但不是必须的对象,在发生内存溢出异常之前被回收 弱引用:描述有用但不是必须 ...

  2. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  3. Java虚拟机垃圾回收(三) 7种垃圾收集器

    Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java ...

  4. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  5. jvm垃圾回收原理(转)

    原文链接:jvm垃圾回收原理 在jvm中堆空间划分为三个代:年轻代(Young Generation).年老代(Old Generation)和永久代(Permanent Generation).年轻 ...

  6. JVM垃圾回收算法(最全)

    JVM垃圾回收算法(最全) 下面是JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:j ...

  7. JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  8. JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)

    一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...

  9. JVM垃圾回收?看这一篇就够了!

    深入理解JVM垃圾回收机制 1.垃圾回收需要解决的问题及解决的办法总览 1.如何判定对象为垃圾对象 引用计数法 可达性分析法 2.如何回收 回收策略 标记-清除算法 复制算法 标记-整理算法 分带收集 ...

  10. 【搞定Jvm面试】 JVM 垃圾回收揭秘附常见面试题解析

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好 ...

随机推荐

  1. XStream

     1.引入需要的jar包,在pom.xml中配置依赖 <dependency> <groupId>com.thoughtworks.xstream</groupId& ...

  2. Jeff Atwood:软件工程已死?

    原文作者:Jeff Atwood 2009年7月,Tom DeMarco在<IEEE Software>杂志上发表了一篇论文,题为"Software Engineering: A ...

  3. XML解析之sax解析案例(一)读取contact.xml文件,完整输出文档内容

    一.新建Demo2类: import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXPar ...

  4. 【Android 应用开发】Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件

    作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...

  5. 主线程中也不绝对安全的 UI 操作

    从最初开始学习 iOS 的时候,我们就被告知 UI 操作一定要放在主线程进行.这是因为 UIKit 的方法不是线程安全的,保证线程安全需要极大的开销.那么问题来了,在主线程中进行 UI 操作一定是安全 ...

  6. 9.6、Libgdx之罗盘

    (官网:www.libgdx.cn) 有些Android和iOS设备可能需要检测使用罗盘检测方向. 注意:罗盘当前在iOS设备中不可用,RoboVM暂不支持. 查询当前罗盘当前是否可用: boolea ...

  7. 9.3、Libgdx手势检测

    (官网:www.libgdx.cn) 触摸屏在输入的基础上增加了手势检测,比如两个手指实现缩放,单击或双击屏幕,长按屏幕等. Libgdx提供了GestureDetector来帮助你检测以下手势: t ...

  8. 【Android 系统开发】Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  9. Ext.Net 1.X_读写配置文件

    [摘要] 有N个ERP数据库帐套,需要从XML文件中读取. 加载指定路径的XML /// <summary> /// 取得帐套列表 /// </summary> private ...

  10. Cocos2D v2.0至v3.x简洁转换指南(三)

    Cocos2D 3.3中的注意事项 如果你在使用Cocos2D 3.3+(是SpriteBuilder 1.3+的一部分)你将不得不替分别的换所有存在的UITouch和UITouchEvent为CCT ...