400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

JVM架构体系及GC命令有哪些

这篇文章给大家介绍JVM架构体系及GC命令有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联自2013年起,先为竹溪等服务建站,竹溪等地企业,进行企业商务咨询服务。为竹溪企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

JVM架构体系及GC命令有哪些

1. Overview
2. JVM架构体系
   1) 垃圾回收
       - 对象存活性判断
       - 垃圾回收算法
       - 垃圾回收器(回收算法的具体实现)
   2) 类装载子系统
       - 启动类加载器
       - 扩展类加载器
       - 应用程序类加载器
       - 自定义类加载器
   3) 执行引擎
       - 解释器
       - 即时编译器
   4) 运行时数据区
       - 堆Heap
       - 方法区
       - 程序计数器
       - 虚拟机栈
       - 本地方法栈
3. 垃圾回收器开启命令
4. Reference

Overview

Java虚拟机Java virtual machine(JVM) 是物理机器的软件实现。java编译器javac将源码文件.java编译成字节码文件.class,然后这个字节码文件.class被放到JVM中,装载并执行字节码文件.class。JVM架构图如下。

JVM架构体系及GC命令有哪些

JVM Architecture

JVM架构体系

  1. 垃圾回收(garbage collection):负责回收堆内存heap中没有被使用的对象

判断对象是否存活,可达性检测

    1. 引用计数算法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1。任何时刻计数器为0的对象就是不可能再被使用的

    2. 根搜索算法:通过一系列名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连时,就证明此对象是不可用的

JVM架构体系及GC命令有哪些

垃圾回收算法

  1. 标记-清除算法Mark-Sweep:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象

    • 效率问题:标记和清除动作都不是高效动作

    • 空间问题:标记清除之后产生大量不连续的内存碎片,碎片太多导致分配较大对象时无法找到足够的连续内存而不得不提前触发另一次gc

  2. 复制算法Copying:它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉

    1. 可用内存缩小为原来的一半

    2. 每次收集时,所有的标记对象都要被拷贝,从而导致一些生命周期很长的对象被来回拷贝多次,消耗大量的时间 ->分代回收来解决这个问题

  3. 分代回收算法Generational Collecting:根据对象存活周期的不同将内存划分为几块

    新生代:内存分为一块较大的Eden空间和两块较小的Survivor空间。新建object在Eden,Eden满时触发YGC,Eden中存活对象被移动到S0区,清空Eden;等Eden再满再YGC,Eden和S0中的存活对象被复制到S1(复制算法保证了S1中来自Eden和S0两部分的存活对象占用连续的内存空间,避免了碎片化);清空Eden和S0。下一轮的时候S0和S1交换角色,如此循环往复。如果对象的复制次数达到15次,该对象就会被送到老年代。

    老年代:对象存活率高

回收器类型

  1. NEW

    • serial,单线程

    • parNew,serial多线程版

    • Parallel Scavenge,复制算法,并行,优先保证吞吐量,不顾及用户STW感受,吞吐量方面优化的系统,停顿时间长是可以接收的。

  2. OLD/tenured

    • Serial Old,Serial回收器的老年代版本,单线程,标记-整理算法

    • Parallel Old,Parallel Scavenge回收器的老年代版本,多线程,标记-整理算法

    • Concurrent Mark Sweep, CMS:优先最短回收停顿时间,用户体验好,标记-清除算法

  3. NEW and OLD

    • 关键点:region内存划分,优先级区域回收方式。优先回收价值最大的region

    • garbage first, G1:它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region(不需要连续)的集合。


JVM架构体系及GC命令有哪些

类装载子系统(classloader sub-system):定位和导入二进制class文件,校验导入类的正确性,为类变量分配并初始化内存,解析符号引用

JVM架构体系及GC命令有哪些

执行引擎(execution engine):执行classloader中的方法指令

JVM架构体系及GC命令有哪些

运行时数据区(runtime data areas):JVM运行时需要从整个计算机内存中划出一块内存区域存储jvm需要用到的东西

JVM架构体系及GC命令有哪些

垃圾回收器开启命令

Command line新生代gc模式老年代gc模式
-XX:+UseSerialGCserial串行回收器serialOld串行回收器
-XX:+UseParNewGCparNew并行回收器default
-XX:+UseParallelGCparallel并行回收器default
-XX:+UseParallelOldGCdefaultparallel并行回收器
-XX:+UseConcMarkSweepGCdefaultCMS并行回收器
-XX:+UseG1GCG1回收器G1回收器

根据上表新生代与老年代的gc模式互为搭配一起为垃圾回收器服务。

关于JVM架构体系及GC命令有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


名称栏目:JVM架构体系及GC命令有哪些
URL地址:http://mbwzsj.com/article/jppodc.html

其他资讯

让你的专属顾问为你服务