JVM的理解(垃圾回收算法和类加载过程)

news2025/1/10 11:07:44

文章目录

    • 1、JVM的位置
    • 2、JVM的体系结构
    • 3、JVM组件
      • 3.1、类加载器(加载class文件)
        • 3.1.1、类加载器的执行步骤
      • 3.2、PC寄存器
      • 3.3、方法区
      • 3.4、栈
      • 3.5、堆
    • 4、GC算法
      • 4.1、引用计数法
      • 4.2、复制算法
        • 1、模型
        • 2、原理图
      • 4.3、标记清除
      • 4.4、标记压缩
      • 总结:


1、JVM的位置

image-20230131214816199

2、JVM的体系结构

image-20230131114905002

3、JVM组件

3.1、类加载器(加载class文件)

类是模板 对象是具体的

image-20230131155917503

1、虚拟机自带的加载器

2、启动类(根)加载器(java程序获取不到,rt.jar)——BOOT

3、扩展类加载器(\jre\lib\ext)——EXC

4、应用程序加载器()——App

5、双亲委派机制

3.1.1、类加载器的执行步骤

1、类加载器收到类加载的请求

2、将这个请求向上委托给父类加载器去完成,一直向上委托,直到到启动类加载器

3、启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则,抛出异常,通知子类加载器进行加载

4、重复步骤3

如果都找不到的话,就会报Class Not Found

null:java调用不到 C、C++

总结

  • APP–>EXC–>BOOT(最终执行)
  • BOOT EXC APP

Native关键字的作用

image-20230131165230648

3.2、PC寄存器

程序计数器,是线程私有的,就是一个指针。

寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制。

3.3、方法区

static、final、Class、常量池

3.4、栈

栈:栈内存,主管程序的运行,生命周期和线程同步;

线程结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题

一旦线程结束,栈就Over!

栈:8大基本类型+对象引用+实例的方法

栈运行原理:栈帧

栈满:StackOverflowError

image-20230131172620230

3.5、堆

一个JVM只有一个堆内存,堆内存的大小是可以调节的。

类加载器读取了类文件后,一般会把什么东西放到堆中?类,方法,常量,变量,保存我们所有引用类型的真实对象;

堆内存中还要细分为三个区域:

  • 新生区(伊甸园区)
  • 养老区 old
  • 永久区 Perm

image-20230131174340891

GC垃圾回收主要是在伊甸园区和养老区

OOM堆内存不够

image-20230131182255702

元空间逻辑上存在:物理上不存在

发生OOM

1、尝试扩大堆内存结果

2、分析内存,看一下哪个地方出现了问题。

GC垃圾回收

JVM在进行GC时,并不是对这三个区域统一回收,大部分时候,回收都是新生代

  • Eden
  • 幸存区
  • 老年区

GC两种类:轻GC(普通的GC),重GC(全局GC)

GC题目:

  • JVM的内存模型和分区,详细到每个区都放什么
  • 堆里面的分区有哪些?新生区,幸存区,老年区,说说他们的特点!
  • GC算法有哪些?标记清除法,复制算法,引用计数器,怎么用的?
  • 轻GC和重GC分别在什么时候发生?

4、GC算法

4.1、引用计数法

image-20230131194015411

4.2、复制算法

1、模型

image-20230131195427888

2、原理图

image-20230131211629434

  • 好处:没有内存的碎片
  • 坏处:浪费内存空间,多了一半空间永久是空的

复制算法最佳使用场景:对于对象存活度较低的场景:新生区

4.3、标记清除

image-20230131212642092

  • 优点:不需要额外的空间!
  • 缺点:两次扫描,严重浪费时间,会产生内存碎片

4.4、标记压缩

优化:可以先进行多次清除之后,在进行标记压缩

image-20230131213145748

总结:

内存效率(时间复杂度):复制算法>标记清除算法>标记压缩算法

内存整齐度:复制算法=标记压缩算法>标记清除算法

内存利用率:标记压缩算法=标记清除算法>复制算法

GC:分代收集算法

年轻代

  • 存活率低
  • 复制算法

老年代

  • 区域大:存活率高
  • 标记清除算法和标记压缩算法混合实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年了学Java还能找到工作么?

Java人才需求缺口巨大 为何还有人找不到工作? 近两年,传统企业开始数字化转型,各企业对互联网IT技术人才呈现井喷趋势。对于进可攻前端、后可守后端的Java程序员而言,市场对他们青睐有加,薪资更是水涨船高。然而在…

Cesium 本地化部署和新增sandcastle案例

源码下载git clone https://gitee.com/mirrors-gis/cesium.gitcd cesium npm install // or yarn install构建 因为下载的源码,还没有构建出cesium的api,以及api对应的文档 ,如果此时直接运行 npm start ,会启动一个8080端口的一个服务,通过 http://localhost:8080 可以看…

SpringCloud Alibaba_Nacos服务注册和配置中心

目录一、Nacos简介1.为什么叫Nacos2.是什么3.能干嘛4.去哪下5.各种注册中心比较二、安装并运行Nacos三、Nacos作为服务注册中心演示1.官网文档2.基于Nacos的服务提供者3.基于Nacos的服务消费者4.服务注册中心对比4.1 Nacos和CAP4.2 Nacos支持AP和CP模式的切换四、Nacos作为服务…

sonar的安装以及使用

sonar的安装以及使用简介1. sonar是什么2. SonarQube与Sonar安装1.下载sonarqubexxx.zip并且解压即可:2.配置数据库3.重启sonarQube会自动建表。使用1.下载sonar-scanner:(这个工具是对源码进行扫描,并将结果保存到数据库以便用上面的sonarqube进行分析)2.配置mysql…

Spring Cloud 以及 Spring Cloud Alibaba 使用总结

title: Spring Cloud 以及 Spring Cloud Alibaba 使用总结 date: 2023-01-13 11:54:15 tags: Spring categories:Spring cover: https://cover.png feature: false 1. 版本对应 官网版本说明:版本说明 alibaba/spring-cloud-alibaba Wiki (github.com) 这里使用 …

通过应用场景深度理解监控宝在业务中的实践价值

近年来,越来越多的企业实现了核心业务系统互联网化,无论是企业内部员工还是企业外部用户或是供应链上下游合作伙伴,均通过互联网和Web应用与企业建立起了紧密的联系。基于此,网络性能对企业业务的影响也变得越来越重要&#xff0c…

阿里云服务器使用docker部署springboot+mysql+redis项目

首先,由于springboot中使用的内置的tomcat,需要讲将ttp转为https的自行搜索博客把: 步骤大概是再阿里云上注册免费SSL证书,下载证书后 拖到项目资源目录下,配置application.properties相关属性 下面引出博客主要内容……

校园网免认证上网的方法

很多时候,当流量不够用时,看着周围那么多热点又连不上,是不是有点心痒痒呢?那么有没有办法不需要要通过这些热点的认证即可上网呢?当然是有的。另外在此强调一点,本教程仅用于学习测试用途,请勿…

【靶机】vulnhub靶机my_file_server2

靶机下载地址:My File Server: 2 ~ VulnHubip:192.168.174.144Kali:192.168.174.128使用arp-scan扫描到ip是使用nmap扫描开放的端口信息,发现靶机开放端口信息如下21端口ftp服务,允许匿名(anonymous&#x…

编译安装nacos集群部署

Nacos 基于 java 开发的,运行依赖于 java 环境。依赖 64 bit JDK 1.8服务器准备:192.168.11.139、192.168.11.141、192.168.11.142 1.首先上传jdk的包 三台都操作tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包cd /usr/local/ 切换至解…

计算机图形学 第9章 自由曲线曲面

第8章不学 目录 # 学习目标 # 消隐 ## 定义 1.线框模型 2.表面模型 3.实体模型 双表结构 定义三维顶点类 定义表面类 读入立方体的点表 读入立方体的面表 1.柏拉图多面体 柏拉图多面体对偶性 正四面体 正八面体 正十二面体 黄金数 黄金矩形 黄金三角形 光滑物体 …

Spring Bean 的生命周期

文章目录一、前言二 、Bean 的生命周期2.1 Bean 的定义信息2.2 Bean 的创建2.3 Bean 的使用2.4 Bean 的销毁2.5 循环依赖2.5.1 什么是循环依赖2.5.2 Spring 解决循环依赖2.5.2.1 三级缓存2.5.2.2 提前暴露2.5.3 注意2.5.3.1 三级缓存结构中 map 分别存储什么类型对象2.5.3.2 三…

JVM-内存与垃圾回收-1.JVM与Java体系结构

1.JVM与Java体系结构 1. JVM:跨语言的平台 Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。 ● 作为一个平台,Java虚拟机扮…

机器人中的数值优化之BFGS(nonconvex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 wolfe conditions 2 cautious update 3 BFGS for nonconvex functions 1 wolfe conditions 当我们需要搜索方向是下降方向时,一定要让近似hessian的矩阵正定,这就需要满足wolfe条件 首先需要满…

34. 实战:基于某api实现歌曲检索与下载(附完整源代码)

目录 前言 (相关链接在评论区) 目的 (相关链接在评论区) 思路 (相关链接在评论区) 代码实现 1. 访问某音乐平台(链接放在评论区了),抓包搜索接…

BUUCTF reverse题解汇总

本文是BUUCTF平台reverse题解的汇总 Page1 easyrereverse1reverse2内涵的软件新年快乐xorhelloworldreverse3不一样的flagSimpleRevJava逆向解密[GXYCTF2019]luck_guy[BJDCTF2020]JustRE刮开有奖简单注册器pyre[ACTF新生赛2020]easyrefinditrsa[ACTF新生赛2020]rome[FlareOn4]…

穿越寒冬春暖花开,当下便是在社科院杜兰金融管理硕士项目读研的好时光

时间无声的从指尖划过,严寒的冬天已经过去,春天即将到来。23考研期间,恰逢特殊时期,好多同学错失了考试的机会,忧心2023是否还可以读研。不要担心,免联考的社科院与杜兰大学金融管理硕士项目来了&#xff0…

【html】如何处理显示ttf字体图标

当看到某些文件的后缀名是ttf,表示是字体文件,除了显示字体,还能显示图标,如果需要显示的图标太多,就把它们放在一个文件中,方便统一管理图标,在此讲一下怎么显示字体图标。 打开文件 电脑上用…

超低损耗电路新研究:光芯片电路+量子计算

(图片来源:网络)在光通信以及使用光而不是电荷来存储和传输信息的量子计算机的设计中,要做到以最小的损耗传输,并能操纵最小单位光,光子起着至关重要的作用。现在,美国国家标准与技术研究院的研…

DynaSLAM-4 DynaSLAM中Mask R-CNN部分源码解析(Ⅲ)

目录 1.RPN 1.1 RPN层的作用与实现解读 1.2 候选框过滤ProposalLayer层 2. DetectionTargetType层 2.1 DetectionTargetType层作用 2.2 正负样本选择与标签定义 1.RPN 1.1 RPN层的作用与实现解读 上篇博客中我们解释了如何通过generate_pyramid_anchors在每一个特征层上…