堆分区:所有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();
     >虚拟机优化选项:网上查询

垃圾收集器(GC)的更多相关文章

  1. 垃圾收集器GC的种类

    堆内存的结构:

  2. 《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读

    堆内存使用分析,GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建.一些类信息,常量,静态变量等存储在方法区.堆和方法区都是线程共享的. GC机制是由JVM提供,用来清理需要清除的对象, ...

  3. HotSpot垃圾收集器GC的种类

      堆内存的结构:

  4. 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一

    Grabage Collection      GC GC要完毕的三件事情: 哪些内存须要回收? 什么时候回收? 怎样回收? 内存运行时区域的各个部分中: 程序计数器.虚拟机栈.本地方法栈这3个区域随 ...

  5. 垃圾收集器GC

    (1)DefNew(串行)收集器 Serial(串行)垃圾收集器是最基本.发展历史最悠久的收集器:JDK1.3.1前是HotSpot新生代收集的唯一选择: 特点: (1) 针对新生代采用复制算法,单线 ...

  6. JVM初探- 内存分配、GC原理与垃圾收集器

    JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念 ...

  7. 深入理解JVM 垃圾收集器(上)

    HotSpot虚拟机中的垃圾收集器 GC评价标准 GC调优 响应时间 吞吐量 1.新生代收集器 Serial收集器 ParNew收集器 Parallel Scavenge收集器 2.老年代收集器 Se ...

  8. 【JVM从小白学成大佬】5.垃圾收集器及内存分配策略

    前面介绍了垃圾回收算法,接下来我们介绍垃圾收集器和内存分配的策略.有没有一种牛逼的收集器像银弹一样适配所有场景?很明显,不可能有,不然我也没必要单独搞一篇文章来介绍垃圾收集器了.熟悉不同收集器的优缺点 ...

  9. jvm系列(三):java GC算法 垃圾收集器

    GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计 ...

  10. GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

随机推荐

  1. from dns.resolver import Resolver ImportError: No module named dns.resolver

    from dns.resolver import Resolver ImportError: No module named dns.resolver python2运行BBScan时提示: from ...

  2. CSS几个要点补充

    css的font-size属性一定要带px单位,font-weight:700[千万不要带单位哦]就等于font-weight:bold加粗 1.如何像淘宝页面一样,随着浏览器的减小而保持内容区大小不 ...

  3. flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI']

    flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI'] 否则,运行程序时app.config里面做的设置就不会 ...

  4. 虚拟机centos7配置本地yum源

    在虚拟机中要使用yum命令,就要先配置一下yum源,下面就分享一下这个过程: 1. 挂载iso到vmware,首先得确保CD/DVD连接到镜像.可以这样操作 2. 执行下面的命令 # mkdir /m ...

  5. function(){}、var fun=function(){}和function fun(){}的区别

    一.基本定义 1.函数声明:使用function声明函数,并指定函数名. function fun() { // ...... } 2.函数表达式:使用function声明函数,但未指定函数名,将匿名 ...

  6. 【Bcftools】合并不同sample的vcf文件,通过bcftools

    通过GATK calling出来的SNP如果使用UnifiedGenotype获得的SNP文件是分sample的,但是如果使用vcftools或者ANGSD则需要Vcf文件是multi-sample的 ...

  7. java web 的 几种跨域方式

  8. Java 文件重命名

    Java 文件重命名 /** * 重命名文件 * @param fileName * @return */ public static void renameFile(String filePath, ...

  9. Html ul、dl、ol 标签

    Html ul.dl.ol 标签 <html> <body> <!-- ul 标签指定字符断点,左边带一个“·”点--> <ul> <!-- li ...

  10. Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat

    题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 ' .问是否可能任意两个不同的串不满足一个是另一个的前缀. 2-sat的是显然的. 枚举每个通配符填0还是1,然后插入Trie树. 对 ...