JVM/GC

作者: wang_souris | 来源:发表于2020-04-12 22:43 被阅读0次

JVM

JVM的主要组成

image.png

JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。

Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。

  • Execution engine(执行引擎):执行classes中的指令。

  • Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。

  • Runtime data area(运行时数据区域):这就是我们常说的JVM的内存。

作用 :首先通过编译器把 Java 代码转换成字节码,类加载器(ClassLoader)再把字节码加载到内存中,将其放在运行时数据区(Runtime data area)的方法区内,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。

GC

怎么判断对象可以被回收

  • java语言中没有使用引用计数法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。

  • 可达性分析算法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。(从GC Roots 到这个对象不可达时,证明此对象是不可用的)

在 java 中可以作为 GC Roots的对象有以下几种:

  • 虚拟机栈(栈帧中本地变量表)中引用的对象

  • 方法区类静态属性引用的对象

  • 方法区常量池引用的对象

  • 本地方法栈 JNI (Native方法)引用的对象

垃圾收集算法

  • 标记-清除

  • 复制

  • 标记-整理

  • 分代收集算法

垃圾收集器

  • Serial收集器(复制算法): 新生代单线程收集器,标记和清理都是单线程,优点是简单高效

  • ParNew收集器 (复制算法): 新生代收并行集器,实际上是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现;

  • Parallel Scavenge收集器 复制算法): 新生代并行收集器,追求高吞吐量,高效利用 CPU。吞吐量 = 用户线程时间/(用户线程时间+GC线程时间),高吞吐量可以高效率的利用CPU时间,尽快完成程序的运算任务,适合后台应用等对交互相应要求不高的场景;

  • Serial Old收集器 (标记-整理算法): 老年代单线程收集器,Serial收集器的老年代版本; Parallel Old收集器 (标记-整理算法): 老年代并行收集器,吞吐量优先,Parallel Scavenge收集器的老年代版本;

  • CMS(Concurrent Mark Sweep)收集器(标记-清除算法): 老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。

  • G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一个新收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而前六种收集器回收的范围仅限于新生代或老年代。

相关文章

  • jvm垃圾清理机制

    更多参考GC及JVM参数浅析JAVA的垃圾回收机制(GC)JVM系列三:JVM参数设置、分析jvm系列 (二) -...

  • JVM系列(五):Java GC 分析

    Java GC就是JVM记录仪,书画了JVM各个分区的表演。 什么是 Java GC Java GC(Garbag...

  • jvm系列:Java GC 分析

    Java GC就是JVM记录仪,书画了JVM各个分区的表演。 什么是 Java GC Java GC(Garbag...

  • jvm系列(五):Java GC 分析

    ​Java GC就是JVM记录仪,书画了JVM各个分区的表演。 什么是 Java GC Java GC(Garba...

  • java(内存和gc)

    JVM内存和gc机制JVM内存 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收...

  • [JVM系列]JVM GC详解

    JVM GC详解

  • JVM系列之GC

    JVM系列之GC 谈到JVM,大家都知道GC(Garbage Collection),GC这个话题说浅了就一句话-...

  • JVM - GC日志

    JVM - GC日志 -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详...

  • 4

    1. Jvm中的Full GC是什么?Full GC发生的场景?如何应对? Full GC讲解之前,先看一张JVM...

  • [JVM系列]JVM的GC机制

    JVM的GC机制

网友评论

    本文标题:JVM/GC

    本文链接:https://www.haomeiwen.com/subject/kcvimhtx.html