堆分区:所有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. HBase 笔记2

    Hadoop 服务启动顺序: zookeeper ->journalnode->namenode -> zkfc -> datanode HBase Master WEB控制台 ...

  2. jdk1.8新特性之lambda表达式及在Android Studio中的使用举例

    Jdk1.8已经出很久了但是很多同学对它的特性在android studio 中的应用可能还不是很熟悉,今天我们就来对这个新特性在AS中做它的应用实践. 一.首先在有JDK1.8的情况下我们要在AS的 ...

  3. firefox 实现web交互机器人

    现在仅有火狐浏览器可以这样操作 -- Filefox 下面是项目目录 -- 前端页面 -- html <!DOCTYPE html> <html lang="en" ...

  4. perl 用网易发邮件报错 554 DT:SPM 163 smtp14

    查看相关链接,貌似被当成垃圾邮件了,发不出去 554 DT:SPM 163 smtp14,EsCowACHUegmKpdc3giRMQ--.29617S2 1553410599,please see ...

  5. springboot之jar包部署步骤

    eclipse中: 1.单击整个项目 run as - maven clean - maven install 2.找到项目所在的路径 找到所有的jar包 3.把jar包放到linux对应的文件夹 l ...

  6. ajax跨域问题及相关解决方案

    1 什么是跨域 所谓的跨域是指浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相同: 2 什么时候会存在跨域的问题 页面访问不同源 ...

  7. 【js】关于闭包、let、var的一个考题

    题目: html: body中有2个div 遍历,给每个div添加点击事件,输出值. js: var声明: 效果: 点击每个div后都打印2. 用户点击前,for循环就已经执行完了,是2,onclic ...

  8. JavaScript Dom 事件

    JavaScript  Dom 事件 对于事件需要注意的要点: // this标签当前正在操作的标签. this // event封装了当前事件的内容. even 常用事件 // 鼠标单击.触发事件 ...

  9. JSOIWC2019游记

    世除我WC...都去广二了qaq,就我还在nj ycs至少也去了pkuwc啊 这个JSOIWC2019的内容看起来很水,进入条件简单,但窝啥都不会,肯定垫底 内容清单: 1.26 上午听机房dalao ...

  10. D1图论最短路专题

    第一题:poj3660 其实是Floyed算法的拓展:Floyd-Wareshall.初始时,若两头牛关系确定则fij = 1. 对于一头牛若确定的关系=n-1,这说明这头牛的排名是确定的. 通过寻找 ...