堆分区:所有new的对象都会存放在堆中

     > 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space;
     > 旧生代(Old Generation):存放生命周期长的对象
     > 持久代(Permenent Generation):用于存放class字节码等

 
JVM使用的GC算法是:分代收集
     > 频繁的收集新生代
     > 较少的收集旧生代
     > 基本不收集持久代

 
JVM的GC机制分为:Minor GC 和 Full GC
     > Minor GC: 即普通GC,负责收集新生代里所有对象,会把Eden里所有活着的对象复制到Survivor里,如果Survivor放不下,则把Survivor里活着的对象放入旧生代里
     > Full GC:会对新生代和旧生代进行收集,算法不同效率会低于GC。显式调用System.gc()时,就是进行Full GC。
     > 触发条件:Eden满了触发Minor GC;有新对象进入旧生代时,旧生代空间不足则进行Full GC

 
JVM的清理算法:
     > 引用计数法(早期JVM):JVM会为对象的引用数进行计数,创建则添加,引用超出范围则删减,当计数为0时,则可以收集
     > 对象引用遍历:JVM会遍历所有根对象,根据对象图递归确定可到达对象,如果某对象实例可以从根对象到达,则将其标记,称为标记对象;在执行收集阶段,只需要简单的扫描堆栈,删除所有未标记对象即可。一般在之后还会进行压缩,以便为新的对象腾出空间。
  > 复制清理法

 
JVM如何清理一个对象:
     > 新生代:采用复制清理法,扫描后把可到达的对象复制到未使用的区域,如survivor里,然后清楚Eden里所有对象
     > 旧生代:采用标记清理然后压缩,内容见对象引用遍历。
     > 机制:串行和并行两种,串行使用于单线程,单cpu;并行使用于多线程,多核cpu。
 

调优:
     >使用调优:尽早将不用的对象赋值null,而不是等到退出生命周期自动赋值;少用finalize(),会增大GC工作量;当程序等待时,手动执行system.gc();
     >虚拟机优化选项:网上查询

JVM GC笔记的更多相关文章

  1. JVM & GC 笔记

    0. 说明 转载并修改自JVM 1. JVM 1.1 什么是JVM JVM为Java虚拟机(Java Virtual Machine) Runtime data area,运行时数据区. 包含5个区域 ...

  2. 【Java虚拟机】JVM学习笔记之GC

    JVM学习笔记二之GC GC即垃圾回收,在C++中垃圾回收由程序员自己来做,例如可以用free和delete来回收对象.而在Java中,JVM替程序员来执行垃圾回收的工作,下面看看GC的详细原理和执行 ...

  3. JVM学习笔记(四)------内存调优【转】

    转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...

  4. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  5. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  6. jvm内存JVM学习笔记-引用(Reference)机制

    在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...

  7. JVM学习笔记-JVM模型

    JVM学习笔记 == 标签(空格分隔): jvm 学习笔记全部来自于<深入理解java虚拟机>总结 jvm内存示意图 虚拟机栈(Java Virtual Machine Stacks): ...

  8. JVM 学习笔记记录

    JVM 学习笔记记录 Sun JDK 监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 jstat JVM S ...

  9. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

随机推荐

  1. qt的编译

    cp qt-everywhere-opensource-src-5.5.0.tar.gz /opt/qt/2.1 解压qt源码 sudo tar xzf qt-everywhere-opensourc ...

  2. bzoj 3669: [Noi2014]魔法森林

    bzoj 3669: [Noi2014]魔法森林 Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号 ...

  3. Node.js Express 的安装和简单使用

    Express的安装: 1.命令行窗口 //--> npm install 组件名 @版本号 --> npm install express @4   //这里安装最新的版本 也可以这样: ...

  4. PHP入门学习精要

    一.文件名 函数.配置文件等其他类库文件之外的一般是以.php为后缀(第三方引入的不做要求): ThinkPHP的模板文件默认是以.html 为后缀(可以通过配置修改): 二.其它命名 其它命名 规则 ...

  5. Python基础——条件判断

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 到目前为止,Python基础系列的文章中的程序都是一条一条语句顺序执行的.在本章中,我会重点介绍让程序选择是否执行语 ...

  6. win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)

    在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...

  7. linux 命令:tr 的简单使用

    工作的需要,用到了tr命令,因为用到的次数不是很多,怕以后忘记了百度,就自己总结下.例子什么的,copy linux shell 脚本攻略这本书. tr:常用选项 -c 用字符串1中字符集的补集替换此 ...

  8. 使用tdload工具将本地数据导入到Teradata数据库中

    想把本地的数据文件(比如txt.csv)中的数据导入到Teradata虚拟机中的表中.既可以使用Teradata Assistant中的import功能,也可以使用fastload导入,前者的缺点是一 ...

  9. Java数字签名——ECDSA算法

    ECDSA 例如微软产品的序列号的验证算法. Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法. 速度快,强度高,签名短 —————————— ...

  10. mysql 学习心得1

    1由于不靠这玩意吃饭 估计不准备精读 顺便中文版也不用担心翻译问题 科科 大致翻了下=,= mysql的感觉怎么就是背命令.... 2DDL语句 定义数据 创建删除修改 create drop alt ...