iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >JVM架构体系与GC命令都有哪些
  • 126
分享到

JVM架构体系与GC命令都有哪些

2023-06-16 04:06:34 126人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关JVM架构体系与GC命令都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JVM运行时数据区OverviewJava虚拟机Java virtual Machi

这篇文章将为大家详细讲解有关JVM架构体系与GC命令都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

JVM运行时数据区

JVM架构体系与GC命令都有哪些

Overview

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

JVM架构体系与GC命令都有哪些

JVM Architecture

JVM架构体系

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

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

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

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

JVM架构体系与GC命令都有哪些

垃圾回收算法

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

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

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

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

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

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

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

垃圾回收器(垃圾回收算法的具体实现)

并行与并发

  • 并行Parallel:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态

  • 并发Concurrent:指用户线程与垃圾收集线程同时执行,用户程序在继续运行,而垃圾收集程序运行于另一个CPU上

  • 新生代minor gc:新生代内存不是很大,miinor gc回收速度一般比较快

  • 老年代major gc/ full gc:老年代内存一般比较大,用于缓存大对象,所以回收速度约minor gc的10倍以上

  • 吞吐量throughput:JVM总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%,即(all-gc)/all(for batch  pipeline)

  • 停顿时间:垃圾回收器正在运行时,应用程序的暂停时间(for streaming pipeline)

回收器类型

  1. NEW

  2. serial,单线程

  3. parNew,serial多线程

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

  5. OLD/tenured

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

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

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

  9. NEW and OLD

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

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

JVM架构体系与GC命令都有哪些

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

  • 启动类加载器bootstrap classloader,负责加载JAVA_HOME/lib下的合法类文件

  • 扩展类加载器extension classloader,负责加载JAVA_HOME/lib/ext下的合法类文件

  • 应用程序类加载器application classloader,负责加载用户路径classpath下的合法类文件

  • 自定义类加载器user defined classloader,class MyClassLoader extends ClassLoader

  • JVM通过双亲委派模型进行类的加载,先交给其最底层父类去加载,父类无法加载时才自己试着去加载。if(parent != null)  parent.loadclass(name) 递归recursion,application classloader -> extension  classloader -> bootstrap classloader

  • 先看user defined  classloader是否缓存了,如果缓存了,就直接返回,如果没有,委派父classloader去加载,如果父缓存了,就直接返回,否则再委派给父classloader;直到最后的bootstrap  classloader,如果其缓存找不到,则在其路径下找,找到则至二级返回,否则往其子类返回,让其子类在其路径下找;最后又回到自定义classloader,如果还找不到就抛异常

JVM架构体系与GC命令都有哪些

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

  • 解释器Interpreter:读取源码或字节码,并逐条直接执行(javac是在JVM外的)

  • 即时编译器Just-In-Time compiler/JIT: 读取源码,更多情况下是字节码,然后即时编译为机器码并执行

  • Java虚拟机是可运行Java代码的假想计算机,java源文件(.java)通过java编译器javac生成字节码文件(.class),字节码文件(.class)通过JVM中的解释器再翻译成特定机器上的机器码

即,源码/源代码/Source code/.java -> 字节码/Bytecode/.class -> 机器码/Machine  code/原生码/Native Code

JVM架构体系与GC命令都有哪些

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

  • 堆Heap:JVM内共享/线程间共享,保存了所有类实例/对象本身instance,不存储基本数据类型对象和自定义对象引用(这些存在各线程的JVM  Stack中),是gc的主要回收区

  • 方法区Method Area/永久代Permanent  Generation:JVM内共享/线程间共享,保存了每个类的信息(类的名称、字段信息、方法信息)class、静态变量static等

  • 程序计数器Program Counter  ReGISter/PC寄存器:线程内共享,保存每个线程正在执行的虚拟机字节码指令的地址;若该方法为Native的,则计数器置空Undefined

  • 虚拟机栈JVM Stack/线程栈:线程内共享,保存基本数据类型的对象和自定义对象的引用,执行环境的上下文

  • 本地方法栈Native Method Stacks:线程内共享,与JVM  Stack所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机执行的Native方法服务

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命令都有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JVM架构体系与GC命令都有哪些

本文链接: https://www.lsjlt.com/news/282432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JVM架构体系与GC命令都有哪些
    这篇文章将为大家详细讲解有关JVM架构体系与GC命令都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JVM运行时数据区OverviewJava虚拟机Java virtual machi...
    99+
    2023-06-16
  • Linux命令具体都有有哪些
    这篇文章主要为大家分析了Linux命令具体都有有哪些的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux命令具体都有有哪些”的知识吧。Linux是一套免...
    99+
    2023-06-28
  • Git命令都有哪些
    本篇文章为大家展示了Git命令都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用语句git init      &nbs...
    99+
    2023-06-22
  • hadoop Shell命令都有哪些
    hadoop Shell命令都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。调用文件系统(FS)Shell命令应使用bin/hadoop fs <a...
    99+
    2023-06-16
  • salt-master命令都有哪些
    salt-master命令都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。**salt-master命令**命令行官网学习网站:http://docs.saltsta...
    99+
    2023-06-05
  • MySQL架构体系知识点有哪些
    这篇文章主要介绍了MySQL架构体系知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一  数据库和数据库实例在MySQL...
    99+
    2024-04-02
  • CentOS常用命令都有哪些
    这期内容当中小编将会给大家带来有关CentOS常用命令都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:使用CentOS常用命令查看cpu more /proc/cpuinfo | grep &q...
    99+
    2023-06-10
  • mysql常用命令都有哪些
    mysql 中最常用的命令包括:数据库管理:create database 创建数据库,use 切换数据库,show databases 显示所有数据库。表管理:create table...
    99+
    2024-04-14
    mysql
  • 常用的linux命令都有哪些
    这期内容当中小编将会给大家带来有关常用的linux命令都有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。本篇文章给大家带来了一份基本够用的  Linux 命令,会涵盖博客搭建系列文章用到的各...
    99+
    2023-06-22
  • Linux系统入门命令具体有哪些
    Linux系统入门命令具体有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。此时此刻我想和大家分享一下我在学习linux过程中的一些经验和教训,如果有人能够正好看到我的这篇文...
    99+
    2023-06-05
  • Solaris常用命令都有哪些呢
    本篇文章为大家展示了Solaris常用命令都有哪些呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。--------查看进程和负载prstat--------查看io和cpuiostat 2-----...
    99+
    2023-06-05
  • Linux打包命令都有哪些呢
    这期内容当中小编将会给大家带来有关Linux打包命令都有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux下打包命令有哪些?Linux下可用于打包的命令有很多,下面为大家分享一下Linux下常...
    99+
    2023-06-28
  • FileZilla Server.exe命令行参数都有哪些
    本篇文章给大家分享的是有关FileZilla Server.exe命令行参数都有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。FileZilla是一种快速、可信赖的FTP客...
    99+
    2023-06-16
  • MySQL体系结构有哪些
    本篇文章为大家展示了MySQL体系结构有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  MySQL体系结构分别有哪些  1、Connectors指的是不同语言...
    99+
    2024-04-02
  • Linux Shell命令具体有哪些
    这期内容当中小编将会给大家带来有关Linux Shell命令具体有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。引言Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的洗礼不仅没...
    99+
    2023-06-16
  • linux下vim的常用命令都有哪些
    linux下vim的常用命令都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。vim常用命令:i 进入编辑模式w 保存q 退出 q!强制退出wq 保存退出e...
    99+
    2023-06-05
  • HDFS的体系结构有哪些
    这篇文章主要介绍HDFS的体系结构有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!分布式文件系统HDFS是一种分布式文件系统,设计用于在商用硬件上运行,它与现有的分布式文件系统有许多相似之处。但是,与其他的分布式...
    99+
    2023-06-02
  • 有哪些Linux系统命令
    本篇内容介绍了“有哪些Linux系统命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  Linux的命令分为内部命令和外部命令:  内部命...
    99+
    2023-06-13
  • linux过滤空文件的命令都有哪些
    本篇文章给大家分享的是有关linux过滤空文件的命令都有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在linux中有经常做文件的操作,今天有个同事在生产环境统计数据,发现...
    99+
    2023-06-16
  • app测试常用的ADB命令都有哪些
    一、adb devices 这是一个列出所有连接设备的命令!运行此命令可以查看当前计算机已连接的所有Android设备,包括虚拟设备和物理设备。 二、adb install 这个命令用于将应用安装到Android设备上!只...
    99+
    2023-10-29
    都有哪些 命令 常用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作