知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

GC算法

1.标记清除算法

优缺点:不需要额外空间,但是遍历空间花费大,而且会产生大量内存碎片

2.复制收集算法

占用两块一样大内存,每次只用使用一块。当需要发生复制的时候,遍历一遍可达对象,进行复制到另外一块内存中。From区转移到To区,或把一下gc次数超过阈值的,转移大Old区。原先的From区,整个清空。

优点:只需要遍历一遍

缺点:复制成本巨大、占用内存多

3.标记整理算法

3.1 采用标记-清除算法一样的方式进行对象的标记

3.2    采用复制清除算一样将所有的存活对象往左端空闲空间移动

3.3    在一块内存上操作,避免产生碎片

优缺点:相对标记清除来说,没有了内存碎片,但是遍历花费仍然很大。

4. GC根据堆内存空间不同区域,采用不同的算法回收

4.1 Young区:         复制收集算法

       原因:对象较少,复制代价小

4.2 老区和方法区:标记清除或标记整理算法

  原因:对象存活较多,次数少,较慢

其他知识点:

一、GC 根

1.栈中引用的对象

2.方法区中的静态成员

3.方法区中常量引用的对象 全局变量

4.本地方法栈中JNI 本地Native方法

二、可到达性分析

 1.从任意根对象到某个对象均不可达时,这个对象就可以被回收。 日常开发中,经常碰到某个大对象,也就是临时使用下,然后抛弃。这个时候可以有个好习惯,就是用完后赋值 null。可能不会立即被gc掉,但是有助于计算。

2. 当一个对象不在引用链上,这个时候可能想象成一张图,对于孤岛中的对象,就可以gc掉。

三、实际中 JVM的gc算法

 1. 分代收集算法,   区分出 新生代GC 和 老年代GC

 2. 新生代 适合复制算法,这个区对象生产太频繁,相应的GC也频繁,使用这种空间换时间的收集算法比较合算。

 3. 老年代 适合标记清理或标记整理,这个区的对象成活率高,GC不需要很频繁。

四、可触及性

可触及的

可复活的

不可触及的

本文由zshipu.com学习笔记或整理或转载,如有侵权请联系,必改之。

Java-100天知识进阶-GC算法-知识铺(五)的更多相关文章

  1. Java-100天知识进阶-GC种类-知识铺(六)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. 一.GC回收器的 4个指标: 1.Throughput,非gc时间与总运行时间的比重. ...

  2. 深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)

    目录 1.Java虚拟机内存模型 1.1 程序计数器 1.2 Java虚拟机栈 局部变量 1.3 本地方法栈 1.4 Java堆 1.5 方法区(永久区.元空间) 附图 2.JVM内存分配参数 2.1 ...

  3. Java-100天知识进阶-JVM内存-知识铺(三)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚 ...

  4. Java-100天知识进阶-基本类型-知识铺(一)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒你记忆深处的知识点. Java的两大数据类型: 一.内置数据类型 二.引用数据类型 内置数据类型 Java语 ...

  5. C++笔记(2)——一些语法基础知识以及基本算法知识

    今天和PAT无直接相关的关系,主要是关于一些语法/算法的笔记,因为我发现自己的基础还没有打扎实,有些时候看别人的代码还会觉得一头雾水,不明白代码的含义. 一些C/C++语法 先从语法开始吧.这部分很琐 ...

  6. Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...

  7. JVM培训之一些GC算法的理论知识

    很精彩的一次内部分享,介绍了大部分的GC算法理论知识,JVM博大精深,本篇文章只是结合本次内部分享总结的一些理论知识,如果有大佬有疑问,欢迎留言指出! Concurrent:并发,程序一边运行一边做G ...

  8. JVM学习(4)——全面总结Java的GC算法和回收机制

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...

  9. JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...

随机推荐

  1. Linux shell脚本编程及系统启动实践

    1.编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www [root@test qiuhom]#cat che ...

  2. ASP.NET ---- Repeater 遍历出省市

    Repeater  控件可以数据库中的数据,一条条的查找出,不需要后端在进行遍历输出了, Repeater必须使用的是Itemtemplate,其它的类型模板按需添加,主要记住Itemtemplate ...

  3. gitlab与jenkins结合构建持续集成

    Jenkins是java编写,需要安装JDK,这里采用 yum 安装,对版本有需求的,可以到 oracle 官网下载 JDK. yum install -y java-1.8.0-openjdk 一. ...

  4. linux如何修改权限详解

    前言 今日,同事问我,服务器上拷贝过来的tomcat,怎么执行不了./startup.sh.于是,我一想,那肯定是没有权限的问题了.于是使用chmod命令更改了权限后,就可以执行了.项目正常启动.我想 ...

  5. 在Vue-cli3.x中引入element-ui的新方式

    今天登上element官网,发现element对vue-cli3.x的项目做了特殊定制: 这意味着即使是按需引入,也无需像过去那样手动安装babel-plugin-component,配置babel. ...

  6. AwaitAsync(异步和多线程)

    参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html这个大佬写的文章,我还是很喜欢的 https://www.cnblogs.com ...

  7. 0基础入门学习Python(第5章)

    列表,元组和字符串 5.1 列表:一个打了激素的数组 有时候可能需要将一些相互之间有关联的数据保存在一起,这个就叫数组.Python将其称为列表. 5.1.1 创建列表 >>> [1 ...

  8. 工具类ToastUtil 避免在子线程中使用抛异常 "Can't create handler inside thread that has not called Looper.prepare()"

    package com.example.kbr.utils; import android.view.Gravity; import android.widget.Toast; import io.r ...

  9. 【亲测有效】Ubuntu18.04 sudo apt update无法解析域名的解决方案

    问题描述如下: 拿起了封尘已久的ThinkPad,输入 sudo apt update 的时候,发现这个命令变得不好使了,具体出现的问题如下图所示: #( 09/08/19@ 2:44下午 )( py ...

  10. rabbitmq多消费者

    rabbitmq多消费者处理 当rabbitmq拥有多个消费者时,队列收到的消息将以轮询(round-robin)的分发方式发送给消费者.每条消息只会发送给订阅列表里的一个消费者.这种方式非常适合扩展 ...