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

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. SpringMVC返回json是设置编辑等消息头,消息头信息介绍(respone.setHeader,这个从网上获取)

    1.  SpringMVC中设置消息头,例子如下: ? 因为上面的代码没有添加该文件的编码说明 , WEB应用程序在将jsp翻译成class文件时 , 把该字符串的内容按默认的保存方式指定的编码ASC ...

  2. Mybatis插件原理分析(一)

    我们首先介绍一下Mybatis插件相关的几个类,并对源码进行了简单的分析. Mybatis插件相关的接口或类有:Intercept.InterceptChain.Plugin和Invocation,这 ...

  3. 04_查看Android内存使用情况

     创建项目 Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  4. driver: Linux设备模型之input子系统详解

    本节从整体上讲解了输入子系统的框架结构.有助于读者从整体上认识linux的输入子系统.在陷入代码分析的过程中,通过本节的知识能够找准方向,明白原理. 本节重点: 输入子系统的框架结构 各层对应内核中的 ...

  5. Linux驱动基础:msm平台,modem等framework加载

    msm平台,AP和CP封装在一起,公用一块内存.所以AP需要负责把整个modem, TZ , rpm等binary拷贝到内存中以供modem等subsystem去运行.那AP这边是怎么分配这些内存,又 ...

  6. Shell中read的常用方式

    read命令的语法: read -p "Prompt" variable1 variable2 variableN -p "Prompt": 显示提示信息(和用 ...

  7. 使用OC和Swift两种语言写一个发射烟花的小项目

    OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同,附带源码. OC代码样式: self.view.backgroundColor = [UIColor blackCol ...

  8. 【翻译】Ext JS最新技巧

    原文:Top Support Tips Mitchell Simoens:控制滚动指示器的自动隐藏 Sencha Touch有一个跨平台的,在所有平台看起来和工作效果都一样的滚动条.两条轴(x和y,水 ...

  9. (二十五)键盘的设置与TextField细节处理

    设置Return Key类型为Send并且勾选下面的复选框即可实现没有内容时禁用keyboard,有内容自动启用. 文本框左边框与文本留有间距的方法: //文本框左侧留下间距 UIView *left ...

  10. 理解WebKit和Chromium: Web应用和Web运行环境

    转载请注明原文地址:http://blog.csdn.net/milado_nju 注:鉴于这一领域非常热,自己也投身其中,会单独开辟一个专题介绍Web应用和Web运行环境. ## 概述 Web已经从 ...