JVM 经典垃圾收集器】的更多相关文章

本文部分摘自<深入理解 Java 虚拟机第三版> 概述 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的实践者.Java 虚拟机规范中对垃圾收集器的实现做出规定,因此不同的厂商.不同版本的虚拟机所包含的垃圾收集器各有不同.所谓经典就是在 JDK7 Update 4 以后,JDK11 发布以前的在 OpenJDK HotSpot 虚拟机所包含的全部可用的垃圾收集器.尽管这些经典垃圾收集器已算不上最先进的技术,但它们都经历了千锤百炼,基本上都是可以放心使用的垃圾收集器.各款经典垃圾收…
本文部分摘自<深入理解 Java 虚拟机第三版> 概述 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.由于大部分 Java 应用主要集中在互联网网站以及基于浏览器的 B/S 系统的服务端,这类应用通常会较为关注服务的响应速度,希望系统的停顿时间尽可能少,CMS 收集器就非常符合这类应用的需求 步骤 从名字可以知道,CMS 收集器是基于标记 - 清除算法实现的,它的运作过程分为四个步骤: 初始标记(CMS initial mark) 仅仅只…
  这个关系不是一成不变的,由于维护和兼容性测试的成本,在JDK 8时将Serial+CMS. ParNew+Serial Old这两个组合声明为废弃(JEP 173),并在JDK 9中完全取消了这些组合的支持(JEP 214).     Serial/Serial Old收集器运行示意图 它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强 调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束. 迄今为止,它依然是HotSpot虚拟机运行在客户端模式下的默认新生代收集器…
前一篇讲了垃圾收集算法--JVM之GC算法.垃圾收集算法——标记-清除算法.复制算法.标记-整理算法.分代收集算法,如果把它看作是方法论,那么下面说的就应该是内存回收的具体实现. 先看一下JVM中有哪些垃圾收集器,如下图所示: 上图一共展示了七种作用于不同分代的垃圾收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用. 1.Serial 收集器 JDK1.3之前作为新生代收集器的唯一选择.它是单线程收集器,这里的单线程不仅仅说明它只会使用一个CPU和一条收集线程去完成垃圾收集工作, 更重要…
本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collection,GC),很多人可能会认为这是 Java 自有的特性,曾经我也一度这样想,后来才知道 GC 的历史要远远长于 Java,它第一次真正使用是在 Lisp 中,现在,像 python.go 等都有自己的垃圾收集器.在 GC 最开始设计时,人们在思考 GC 时就需要完成三件事情: 哪些内存需要进行回收? 什么时候…
1.Java虚拟机原理 所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机, 大名鼎鼎的Vmare就属于系统虚拟机,他完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台.程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们称为Java字节码指令.无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中.到现在引用最广泛的是HotSpot虚拟机 2.…
上一篇JVM垃圾收集器与内存分配策略(一),下面是jdk1.7版本的垃圾收集器之间的关系,其中连线两端的两种垃圾收集器可以进行搭配使用,下面来总结一下这些收集器的一些特点以及关系. 一.Serial收集器 1.serial收集器是一个单线程的收集器,单线程说明两点:①只会使用一个CPU或者一条线程来完成垃圾收集的工作:②在进程垃圾收集的时候,必须暂停掉其他所有的工作线程(Stop The World),直到收集结束.这项收集的工作是虚拟机在用户不可见的情况下将其正常工作的线程停掉,然后在后台进行…
前言 垃圾收集器作为内存回收的具体表现,Java虚拟机规范并未对垃圾收集器的实现做规定,因而不同版本的虚拟机有很大区别,因而我们在这里主要讨论基于Sun HotSpot虚拟机1.6版本Update22,此虚拟机包含的收集器如下所示: 如图展示了7种作用于不同分代的收集器,若两个收集器之间存在连线,说明他们可以搭配使用.我们堆收集器进行比较就是为了针对具体的情况选择最合适的收集器. 一.Serial收集器 Serial是最基本,最早的收集器,曾是JDK1.3.1之前的虚拟机新生代唯一选择,这个收集…
前言 很多人将垃圾收集(Garbage Collection)视为Java的伴生产物,实际1960年诞生的Lisp是第一门真正使用内存动态分配与垃圾手机技术的语言.在目前看来,内存的动态分配与内存回收已经相当成熟,但了解GC与内存分配还是非常有必要的,当排查内存溢出.内存泄漏问题,当垃圾手机称为系统高并发的瓶颈时,就需要我们对其实施必要的监控与调节. 在前面的篇章中我们了解到Java的运行时区域中的程序计数器.虚拟机栈.本地方法栈的内存分配与回收具有确定性,但Java堆不同,这部分内存的分配与回…
本随笔是<深入理解Java虚拟机 JVM高级特性与最佳实践>读书笔记. 1.JDK1.7之后的HotSpot虚拟机所包含的所有收集器如下: 解读: 1. 总共有7种垃圾收集器 2.Serial,ParNew,Parallel Scavenge 负责堆年轻代中的内存回收 3.Serial Old,CMS,Parallel Old 负责堆老年代中的内存回收 4.G1分代回收,能独立管理整个GC堆 5.两个收集器中间存在连线的,说明能够配合工作 各个收集器对比 名称 收集算法 工作区域 可配合对象…