引用计数算法

给对象加一个计数器,引用一次+1,引用时效就-1,当计数器=0时对象就不能再被使用;

实现简单,判定效率高;Java虚拟接没有使用,主要原因是很难解决对象之间循环引用问题;

GC算法:

GC Roots 作为起始点,开始向下搜索,这个搜索路径叫做引用链,当一个对象到GC Roots没有任何引用链,那么这个对象就是不可用的。

Java中可作为GC Roots的对象:虚拟机栈中的引用对象、方法区中类静态属性引用对象、方法区中常量引用对象等。

标记清除算法

分为标记和清除阶段,首先标记所有需要回收的对象,在标记完后统一回收标记的对象。

堆中的老年代:因为存活率高,没有额外空间进行分配担保,就必须使用标记清理算法回收。

标记清理算法问题:

  • 1、标记和清除的效率不高;
  • 2、标记清除后会产生大量不连续的内存碎片,当需要分配较大对象时无法找到足够内存,又会触发垃圾收集动作;

复制算法

堆中的新生代:每次垃圾回收都有大量对象死去,只有少量存活所以使用复制算法;

jvm的复制算法是将内存划分为一块较大空间Eden和两块较小的Suvivor,一般比例是8:1:1。每次只是用Eden和Suvivor中的一块,当回收时,将Eden和Suvivor中存活的对象复制到另一块Suvivor中,再将Eden和使用的Suvivor清除掉。

标记压缩算法(标记整理)

标记-压缩算法与标记-清理算法类似,只是后续步骤是让所有存活的对象移动到一端,然后直接清除掉端边界以外的内存

垃圾收集器

常见的垃圾收集器:

Serial:新生代收集器,单线程。

ParNew:新生代收集器,Serial的多线程版本,和CMS配合工作。

Parallel Scavenge:新生代,可以控制吞吐量。配合自适应调节策略,可以让虚拟机自动完成内存调优。

Serial Old:Serial老年代版本,单线程。

Parallel Old:Parallel Scavenge老年代版本,多线程

CMS:老年代收集器,特点:并发,低停顿,以获取最短回收停顿时间为目标。基于标记-清除算法。

CMS过程

  • 1初始标记 :标记GC Roots能直接关联的对象,速度很快。
  • 2并发标记 :进行GC Roots Tracing的过程,耗时长
  • 3 重新标记 :修正并发标记期间不正确的标记记录
  • 4 并发清除

Minor GC和Full GC之间的区别

堆内存划分为 Eden、和两块Survivor,JDK1.8移除了永久代。

  • Minor GC 新生代GC: JAVA对象大多具备朝生夕灭的特性,所以Minor GC非常频繁,回收速度也比较快。
  • Full GC/Major GC 老年代GC: 速度一般比Minor GC慢很多。

内存分配策略

  • 对象优先在新生代Eden区中分配,当Eden区没有足够空间时,虚拟机发起Minor GC.
  • 大对象直接进入老年代,大对象典型的就是很长的字符串或数组。
  • 长期存活的对象进入老年代。

【深入理解Java虚拟机】垃圾回收的更多相关文章

  1. 深入理解java虚拟机---垃圾回收(十一)

    1.垃圾回收要解决的问题 可以通过配置虚拟机参数来打印出内存日志: -verbose:gc -XX:+PrintGCDetails 垃圾收集(Garbage Collection,GC),要设计一个G ...

  2. Java虚拟机垃圾回收(三) 7种垃圾收集器

    Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java ...

  3. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  4. Java虚拟机垃圾回收(三): 7种垃圾收集器(转载)

    1.垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法.火车算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚 ...

  5. Java虚拟机垃圾回收(二) :垃圾回收算法(转载)

    1.标记-清除算法 标记-清除(Mark-Sweep)算法是一种基础的收集算法. 1.算法思路 "标记-清除"算法,分为两个阶段: (A).标记 首先标记出所有需要回收的对象: 标 ...

  6. Java虚拟机垃圾回收:基础点(转载)

    1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...

  7. ☕【JVM技术指南】「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【下部】

    承接上文 (完结撒花1-52系列)[JVM技术指南]「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"[上部] 并行收集器 并行收集器(也称为吞吐量收集器)是类似 ...

  8. Java虚拟机-------垃圾回收机机制

    概述 jvm中的堆图 在了解 垃圾回收器 之前,首先得了解一下垃圾回收器的几个名词. 1. 吞吐量CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值.比如说虚拟机总运行了 100 分钟,用户代 ...

  9. Java虚拟机—垃圾回收算法(整理版)

    1.概述 由于垃圾收集算法的实现涉及大量的程序细节.因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程.主要涉及的算法有标记-清除算法.复制算法.标记-整理算法.分代收集算法. 2 ...

  10. 了解java虚拟机—垃圾回收算法(5)

    引用计数器法(Reference Counting) 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器减1.只要对象A的引用计数器的 ...

随机推荐

  1. Codeforces Round #647 (Div. 2) - Thanks, Algo Muse! A、Johnny and Ancient Computer B、Johnny and His Hobbies C、Johnny and Another Rating Drop

    题目链接:A.Johnny and Ancient Computer 题意: 给你两个数a,b.问你可不可以通过左移位运算或者右移位运算使得它们两个相等.可以的话输出操作次数,不可以输出-1 一次操作 ...

  2. Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad) C. Division (数学)

    题意:有两个数\(p\)和\(q\),找到一个最大的数\(x\),使得\(p\ mod\ x=0\)并且\(x\ mod\ q\ne 0\). 题解:首先,如果\(p\ mod\ q\ne0\),那么 ...

  3. js--执行上下文和作用域相关问题

    前言 如果你是或者你想成为一名合格的前端开发工作者,你必须知道JavaScript代码在执行过程,知道执行上下文.作用域.变量提升等相关概念,并且熟练应用到自己的代码中.本文参考了你不知道的JavaS ...

  4. [Golang]-3 函数、多返回值、变参、闭包、递归

    // test01 project main.go package main import ( "fmt" ) // 单返回值的函数 func plus(a int, b int) ...

  5. 实战交付一套dubbo微服务到k8s集群(1)之Zookeeper部署

    基础架构 主机名 角色 IP地址 mfyxw10.mfyxw.com K8S代理节点1,zk1 192.168.80.10 mfyxw20.mfyxw.com K8S代理节点2,zk2 192.168 ...

  6. hdoj 5971

    Wrestling Match Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. C# 类(9) - 接口 Interface

    Interface 接口 类似 抽象类,也不能被实例化...(前面说的静态类,加上抽象类,还有这个,都3个了)接口其实比 抽象类 更加抽象.接口的方法(这个方法还不能有实体代码,和抽象类的抽象方法差不 ...

  8. 写给程序员的机器学习入门 (十一) - 对象识别 YOLO - 识别人脸位置与是否戴口罩

    这篇将会介绍目前最流行的对象识别模型 YOLO,YOLO 的特征是快,识别速度非常快

  9. How to get the real screen size(screen resolution) by using js

    How to get the real screen size(screen resolution) by using js 获取用户屏幕的真实像素分辨率, 屏幕实际尺寸 window.deviceP ...

  10. VSCode Plugin & Auto File Header Comments Generator

    VSCode Plugin & Auto File Header Comments Generator Xcode SwiftUI // // ContentView.swift // Mem ...