JVM详情

JVM详情

  • 一、JVM内存划分
  • 二、双亲委派模型(重点考察)
  • 三、 GC(垃圾回收机制)
    • 垃圾的判定算法
    • 垃圾回收算法

在这里插入图片描述

一、JVM内存划分

  1. 堆:存放new出来的对象;(成员变量)

  2. 方法区:存放的是类对象;(静态变量)

  3. 栈(虚拟机栈, 本地方法栈):存放方法之间的调用关系;(局部变量)

  4. 程序计数器:存放的是下一个要执行的指令;

注意:变量存放在哪一个区域,和变量类型无关!和变量的形态(局部,成员,静态)有关!
在这里插入图片描述

  • a 是成员变量,在堆上
  • b 是静态变量,在方法区
  • c 是成员变量,在堆上
  • d 是静态引用对象在方法区,new 出来的对象在堆上
  • A 是局部变量,在栈上,new 出来的对象在堆上

二、双亲委派模型(重点考察)

什么是双亲委派模型?

    一个类加载器收到类加载请求,首先自己不会加载这个类,而是把这个请求委派给父类加载器完成,每一层都是如此,因此所有加载请求最终都会送到最顶层的加载器中,只有父加载器反馈无法加载这个请求,子类才会尝试去加载;

2.4.2、涉及到的类加载器

  1. Bootstrap ClassLoader :负责加载标准库中的类;

  2. Extension ClassLoader:负责加载JVM扩展的库的类(标准库中没有,但JVM自己实现出了);

  3. Application ClassLoader :负责加载我们自己的项目中的自定义类;

三、 GC(垃圾回收机制)

 在学习C语言的过程中,需要通过 malloc 申请内存,最后通过 free 进行释放,这里就容易存在一个问题——忘记free,造成内存泄漏;而GC(垃圾回收)就是一个主流处理方案;

垃圾的判定算法

  • 可达性分析(JVM采用)

     顾名思义,就可以到达的变量约定一些特定的变量,成为 “GC roots”, 每隔一段时间,从 GCroots 出发,进行遍历,查询哪些变量是能够被访问到的,能被访问到的变量就称为 “可达”,否则就是 “不可达”-- 栈上的变量;-- 常量池引用的对象;-- 方法区中静态属性引用对象;-- 方法区中常量引用的对象;
    
  • 引用计数

     每多一个引用指向该对象,计数器就+1;每少一个引用指向该对象,计数器就-1;当计数器的数值为 0 时,就说明这个对象已经没有人能够再使用了,此时就可以进行释放;但是如果有相互引用的情况,类似于死锁,那这个内存就永远也释放不了
    

垃圾回收算法

  • 标记-清除算法

     简单来说,就是标记出垃圾后,直接把对象对应的内存空间进行释放;但是假如释放了3块空间不连续,那么虽然内存上有3块空间,但是却new不出一个完整的2块空间引起了内存碎片问题
    
  • 复制算法
    这是针对内存碎片问题,引入的办法;

        具体的,将内存分成两块大小相等的空间,但只使用其中的一块,当需要进行垃圾回收时,就把正在使用的那块空间上还存活的对象复制到另一块上,再将使用过的那块内存全部清空;这样做的好处就是不用再考虑内存碎片问题;1. 空间利用率相比标记清除法更低了;2. 但是若一轮GC下来,大部分需要保留,只有极少数要回收,这时候复制的开销就很大了;
    
  • 标记整理算法

    标记过程与 “标记-清除算法”一致,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端连续性的覆盖,然后直接清除掉边界以外的空间;(类似于顺序表的删除元素)
    
  • 分代算法

    分代算法综合了上面所说的三种算法,通过区域划分,实现不同区域用不同的垃圾回收策略,从而实现更好的垃圾回收1. 刚创建出来的对象,进入伊甸区;2. 若新对象熬过一轮GC,没被回收,就通过复制算法,复制到生存区;3. 生存区的对象也要经历GC,每熬过一次GC,就会通过复制算法拷贝到另一个生存区(只要这个对象不死亡,就会在两个生存区来回拷贝);4. 如果一个对象在生存区中,反复坚持了很多轮还没去世,就会被放到老年代(老年代GC的频率会降低);5. 若对象来到了老年代,也会进行定期的GC,只是频率更低了;老年代采取标记整理的方式来处理垃圾;
    

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7 启动谷歌浏览器 java+Selenium+chrome+chromedriver

前言:自己想使用该技术实现自动化抓取音乐,目前在window上运行成功,需要在Linux Centos服务上跑,配置上出现了许多问题,特此记录。 参考文档:CentOS7 安装Seleniumchromechromedriverjava_远方丿的博客-CSD…

这个酒店管理方法太酷了!赶紧试试吧

安全是酒店管理中最重要的优先事项之一,酒店保障住客和员工的生命安全是不可妥协的责任。为了有效预防和应对潜在的火灾风险,引入烟感监控系统是一种普遍且高效的解决方案。 烟感监控系统通过及时检测烟雾和火源,及时发出警报和采取措施&…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转, 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用,使用递归互斥信号量,但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

解决Element Plus中Select在El Dialog里层级过低的问题(修改select选项框样式)

Element Plus是Vue.js的一套基于Element UI的组件库&#xff0c;提供了丰富的组件用于构建现代化的Web应用程序。其中&#xff0c;<el-select>是一个常用的下拉选择器组件&#xff0c;但在某些情况下&#xff0c;当<el-select>组件嵌套在<el-dialog>&#xf…

SQL Server 2016 sa 登录失败,错误代码18456

问题&#xff1a;客户数据库服务器新安装的SQL Server 2016 sa 登录失败 一、故障原因 18456错误是因密码或用户名错误而使身份验证失败并导致连接尝试被拒或者账户被锁定无法sa登录 二、解决办法 按照如下操作依次排查处置 2.1 使用Windows身份认证登录 2.2 windows身份登…

全新二开美化版UI好看的社区源码下载/反编译版

2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版&#xff0c;相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版&#xff08;请尊重每个作者的版权&#xff09;&#xff0c;这个版本没有加密&#xff0c;可以进行反编译&#xff0c;…

Linux:shell脚本:基础使用(2)

test命令 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] (前后至少应有一个空格) 常用的测试操作符 -d&#xff1a;测试是否为目录&#xff08;Directory) -e&#xff1a;测试目录或文件是否存在&#xff08;Exist&#xff09; -f&#xff1a;测试是否…

一键开启ChatGPT“危险发言”

‍ ‍ 大数据文摘授权转载自学术头条 作者&#xff1a;Hazel Yan 编辑&#xff1a;佩奇 随着大模型技术的普及&#xff0c;AI 聊天机器人已成为社交娱乐、客户服务和教育辅助的常见工具之一。 然而&#xff0c;不安全的 AI 聊天机器人可能会被部分人用于传播虚假信息、操纵舆…

Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?

Windows用户如何将cpolar内网穿透配置成后台服务&#xff0c;并开机自启动&#xff1f; 文章目录 Windows用户如何将cpolar内网穿透配置成后台服务&#xff0c;并开机自启动&#xff1f;前置准备&#xff1a;VS Code下载后&#xff0c;默认安装即可VS CODE切换成中文语言 1. 将…

回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门…

探索远程访问内网群晖NAS 6.X(使用独立域名)【内网穿透】

使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中&#xff0c;我们向大家演示了如何使用cpolar&#xff0c;创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

虹科分享 | 如何通过ntopng流量规则来监控网络流量

让我们假设您有一个网络&#xff0c;其中本地主机生成恒定数量的流量。你如何发现他们是否行为错误&#xff1f;碰巧&#xff0c;一些本地主机行为开始异常&#xff0c;与它们之前相比&#xff0c;有一个异常的流量(发送或接收)&#xff1a;您如何发现这些情况并通过警报报告它…