3.0、JVM 学习——垃圾回收器

此生再无相见时 提交于 2019-11-27 07:05:13

前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好。

本文基于 HotSpot 虚拟机

本文基于 HotSpot 虚拟机

JVM 内存模型中的堆(Heap)

JVM 内存模型中的堆是整个JVM中占用内存最大的一块。

堆分为新生代和老年代

堆的内存空间可以被细分为新生代和老年代,新生代中的对象有着“朝生夕死”的特征,老年代中的对象则大概率的会"持久"的被应用调用。
新生代对象达到某些条件(比如新生代垃圾回收次数超过默认的15次,或同年龄对象超过Survivor一半)可以进入老年代。
超过阀值大小的大对象直接进入老年代。

新生代 和 Minor GC

在HotSpot 中,新生代又被细分为一个 Eden 和 两个Survivor,一个 Eden :一个 Survivor=8:1,即新生代的内存空间会被分为10份,Eden占8份, 两个Survivor各占一份。两个Survivor又被细分为 Survivor From 和 Survivor To
新生代空间有限,当条件满足时会触发新生代的垃圾回收——Minor GC,存活下来的对象放入 Survivor To,连同之前 Survivor From 依旧存活且没有进入老年代的对象一起存到 Survivor To,接着, Eden和Survivor From 会被置空, Survivor From和 Survivor To 互换角色,等待下一次垃圾回收。

老年代和 Major GC/FullGC

老年代空间也是有限的,老年代的垃圾回收叫做 Major GC/FullGC。
Major GC/FullGC 可能会触发新生代的 Minor GC,只是可能。
Major GC 和 FullGC 一个意思。

永久代和Major GC/Full GC

永久带是 HotSpot 虚拟机对JVM 规范中方法区的实现,
HotSpot JDK 对方法区的实现在JDK1.7以及之前被叫做永久代,其内存的物理位置和Java Heap(Java 堆)在一起,从JDK1.8开始,永久代被取消,取而代之的被称为元数据,其位置为操作系统的物理内存,比如你的计算机是4G内存,则方法区的实现大小理论上就是4G,而不是之前JVM的永久代的大小了.
在永久代和Java 堆在一起的时候,Full GC也会连带负责 永久代的垃圾回收。

垃圾回收器

垃圾回收器也分为新生代的垃圾回收器和老年代的垃圾回收器搭配使用,直到 G1出现——G1是不区分新生代和永久代的。

线程阻塞···

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!