jvm总结学习

四种加载器

1.启动类加载器

2.拓展类加载器

3.应用程序加载器

4.自定义加载器

沙箱机制

就是为了保证安全,增加的一些权限。

native方法区(静态变量,常量,类信息(构造方法,接口定义),运行时的常量池)

1.凡是带了native的关键字,说明java的作用范围达不到了,会去底层调用C语言的库。

2.会进入本地方法栈

3.调用本地方法本地接口 JNI

4.JNI作用:会拓展java的使用融合不同的编程语言为Java使用! 最初是C C++

java诞生的时候,C C++横行 ,想要立足,必须要有调用 C C++的方法

5.它在内存区专门开辟了一个空间 Native Method Stack 来标记native方法,

6.在最终执行的时候,加载本地方法库中方法通过JNI

堆(重点)

一个jvm只有一个堆,堆的大小可以调节, 一般 类,方法,常量,变量 ,保存我们所有引用类型的真实对象;

堆内存还分为3个区域;

新生区

老年区

永久区 用来存在JDK字自身携带的Class对象。interface元数据,存储的是java运行时的一些环境或者类信息。

GC垃圾回收,主要是在新生区和老年区

在JDK1.8之后 永久区改为元空间 方法区在元空间中 常量池在方法区中

元空间只在逻辑上存在,物理上是不存在的。

如果出现OOM 堆内存溢出 怎么解决:

1.尝试扩大内存看结果,

2.分析内存,看下哪个地方出现了问题(死循环,递归调用之类的)

GC

什么是GC root?

JVM在垃圾回收的时候,需要找到“垃圾”对象,也就是没有被引用的对象,但是直接找垃圾对象是比较耗时间的,所以反过来找,先找非垃圾对象,也就是正常的对象,那么就要从某些“根”去找,根据这些根的引用路径找到正常的对象,而这些根有个特征,就是它会引用其他的对象,而不会被其他的对象引用,例如:栈中的本地变量,方法区的静态变量,本地方法栈的变量,正在运行的线程等都可以作为GC root;

jvm在进行垃圾回收的时候,并不是对这三个区域统一回收。大部分的时候,回收的都是新生代

三个区域进行垃圾回收

新生代

幸存区

老年区

GC 分为两种 轻GC(普通的GC),重GC(全局的GC)

GC题目:

JVM内存模型和分区~详细到每个区都放什么?(看上面的图片)

堆里面的分区有哪些? Eden,form,to,old,说说他们的特点!

GC的算法? 标记-清除法,标记整理,复制算法,引用计数法(不常用) 这些怎么用的?(下面有详细的工作原理介绍)

轻GC和重GC分别在什么时候发生?

轻GC是在新生区、存活区进行发生的。

重GC是在新生区、存活区、老年区进行发生的。

复制算法:

新生区 :幸存区(from):幸存区(to)=8:1:1 原理就是在新生区产生的内存放在幸存区from中,然后两个幸存区 ,谁的空间是空的 谁就是to区 ,在内存不断的生成中,两个幸存区来回交换,即:最终保留一个to区 也就是空的,另外一个from存放的就是活下来的数据。

好处:没有内存的碎片

坏处:浪费了内存的空间:多了一半空间永远是空的to区

试用的场景:对象存活度较低的时候:新生区

标记-清除算法:

好处:不需要额外的空间。

坏处:两次扫描,严重浪费时间,会产生内存碎片。

试用的场景:对象存活度较低的时候:新生区

JVM1.7和1.8java虚拟机发生了哪些变化?

1.7中存在永久代,1.8改为元空间,元空间所占的内存不是虚拟机内部,而是本地内存空间,不管是永久代还是元空间,他们都是方法的具体实现,之所以元空间所占的内存改为本地内存,官方的说法是为了和JRockit统一,不过还有其他的一些原因,比如:方法区所存储的类信息通常是比较难确定的,所以对于方法区的大小是很难确定的,太小了容易出现方法区的溢出,太大了又会占用虚拟机更多的 空间,而转移到本地,则不会影响虚拟机所占的内存。

总结

内存效率:复制算法>标记清除算法>标记整理(压缩)算法 说白了 就是比较 时间复杂度

内存整齐度:复制算法=标记整理(压缩)算法 >标记清除算法 说白了 就是比较 内存连不连续

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

没有最优的算法,只有最合适的算法------>GC:分代收集算法

年轻代:

存活率低

复制算法!

老年代:

区域大:存活率

标记清除(内存碎片不是很多)+标记压缩(整理) 混合实现

判断 对象是否存活

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

可达性分析算法---------这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时(按照图说的话,就是从GC Roots到这个对象不可达),则证明这个对象是不可用的,如下图,obj5、obj6、obj7、虽然互相有关联,但是都是GC Roots是不可达的,所以他们将被判定为可回收的对象。

垃圾回收算法

标记-清除算法(Mark-Sweep)---最基础的算法,分为两个阶段,标注和清除,标注阶段标出所有需要清除的对象,清除阶段会回收被标记对象所占用的空间

复制算法---为了解决Mark-Sweep算法内存碎片化的缺陷而被提出的算法。将内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已经使用的内存清掉,如图

标记-整理算法(Mark-Compact) -------结合了以上的两个算法,为了避免缺陷而提出。标记阶段和Mark-Sweep算法相同,标记后不是清理对象,而是将存

活对象移向内存的另一端。然后清除边界外的对象。如图

分代收集算法(Generational Collection)重要

分代收集算法是目前大部分JVM所采用的算法,其核心思想是根据对象存活的不同生命周期将内存划分为不同的域,一般情况下将GC堆划分为老年代和新生代。

老年代的特点就是在垃圾回收时只有少量的对象需要被回收。

新生代的特点就是在回收时都有大量垃圾需要被回收,因此可以根据不同的区域选择不同的算法。

目前大部分的jvm的GC对于新生代都采用Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,即要复制的操作比较少,当通常不是按照1:1划分新生代。一般将新生代划分为一块较大的Eden空间和两个较小的Suivior空间,每次使用Eden空间和其中的一块Survivor空间,当进行回收时,将该两块空间中还存活的对象复制到另一块Survivor空间中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 代码混淆工具概述

在保护Python代码安全方面,有多种混淆工具可供选择,包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况,以及在实际应用中的注意事项。 📝 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…

阿里云可观测 2024 年 3 月产品动态

本月可观测热文回顾 文章一览: 全新架构!日志服务 SLS 自研免登录方案发布 AIOps 智能运维:有没有比专家经验更优雅的错/慢调用分析工具? 一文看懂如何做好 SQL 质量监控 使用 SPL 高效实现 Flink SLS Connector 下推 功能快…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己…

LeetCode刷题实战1:两数之和

从今天开始加入刷题大军,把算法题刷爆,我们直接进入主题。 题目内容 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应…

经济学 生产成本 垄断

经济利润:收益-显性成本-隐性成本 会计利润:收益-显性成本 隐性成本:间接的机会成本 成本分为两种:可变成本和固定成本 可变成本:随着生产产品数量发生改变 固定成本 平均成本:每一单单位产品的成本 通…

二维码的生成、下载Java,并返回给前端展示

分析 将生成的二维码图片,以IO流的方式,通过response响应体直接返回给请求方。 第一、不需要落到我们的磁盘,操作在内存中完成,效率比较高。 第二、所有生成二维码的请求,都可以访问这里,前端直接拿img标…

vue想要突破全局样式限制又不影响别的页面样式怎么办

<!-- 用scope盖不住全局&#xff0c;随意来个class匹配私定&#xff0c;搜索关键词&#xff1a;不要随便改&#xff0c;乱打class名 --> <style> .lkajsdfjkalsfhkljashkflhaskl .el-input.el-input--default.el-input--suffix { width: 160px !important; } …

MySQL索引原理

MySQL索引原理 1、Innodb中的B树是怎么产生的呢? 背景1.1、mysql索引使用B树&#xff0c;为什么&#xff1f;1.2、主键索引图示1.3、mysql最好使用自增ID&#xff1a;为什么呢&#xff1f;1.4、高度为3的B树能存多少条数据&#xff1f;a、假设2层b、假设3层 2、索引采用什么数…

从0到1构建uniapp应用-store状态管理

背景 在 UniApp的开发中&#xff0c;状态管理的目标是确保应用数据的一致性&#xff0c;提升用户体验&#xff0c;并简化开发者的工作流程。通过合理的状态管理&#xff0c;可以有效地处理用户交互、数据同步和界面更新等问题。 此文主要用store来管理用户的登陆信息。 重要…

python--面向对象编程和类的定义,对象的创建

一、面向对象简介 1、什么是面向对象 面向对象是一种编程思想&#xff0c;把数据和对数据的多个操作方法封装在一起组成类&#xff0c;这样通过这个类创建出来的对象,就可以直接调用这些方法了。 2、面向对象相关的术语 类&#xff1a;用来描述具有相同的属性和方法的对象的…

基于深度学习的花卉检测与识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;在本篇博客中&#xff0c;我们深入探讨了基于YOLOv8/v7/v6/v5的花卉检测与识别系统。核心上&#xff0c;我们采用了最新的YOLOv8技术&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5等先进算法&#xff0c;进行了细致的性能指标对比分析。我们详细介绍了当前国内外…

刚刚,Sora官方发布首支MV

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 AIGC&#xff0c;算是狠狠地震荡了一把音乐圈。 就在刚刚&#xff0c;OpenAI官方账号发布的一支由Sor…

哲♂学家带你用顺序表实现通讯录

实现通讯录能使我们进一步加深对顺序表的理解&#xff0c;接下来就由本哲♂学家带你手把手实现通信录。 其中需要用到顺序表的知识可以点击下面链接了解&#xff1a;http://t.csdnimg.cn/9SjGd话不多说&#xff0c;我们♂开始吧。 一、通讯录头文件声明 由于我们前面已经写过…

蓝桥杯 --- 日期问题模板

目录 1.如何判断闰年 2.如何遍历当前年份的每一天 3.如果想要输出某一年某一天到某一年某一天之间一共有多少天。 4.精确到具体周几到周几的问题分析 5.如何直接通过一层for循环枚举年月日 习题&#xff1a; 蓝桥杯竞赛特别喜欢考日期问题&#xff0c;今天给大家分享一下…

JS——判断节假日(假日包括周末,不包括调休上班的周末)

思路&#xff1a;创建两个数组&#xff0c;数组1为节假日数组&#xff0c;数组2为是周末上班日期数组。如果当前日期&#xff08;或某日期&#xff09;同时满足2个条件&#xff08;1.在节假日数组内或在周末。2.不在周末上班日期数组&#xff09;即为节假日&#xff0c;否则即为…

即将截稿 CCF-A多媒体顶会ACM MM‘24 北京时间4月9日提交摘要

会议之眼 快讯 第32届ACM MM (ACM MULTIMEDIA)即国际多媒体会议将于 2024 年 10月28 -日11月1日在澳大利亚墨尔本隆重举行&#xff01;MM是由ACM&#xff08;Association for Computing Machinery&#xff0c;计算机协会&#xff09;主办的国际性学术会议&#xff0c;是计算机…

【Java EE】Maven jar 包下载失败问题的解决方法

文章目录 1. 配置好国内的Maven源1.1配置当前项⽬setting1.2设置新项⽬的setting 2.重新下载jar包3.其他问题⭕总结 1. 配置好国内的Maven源 因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源 接下来介绍, 如何设置国内源 1.1配…

分享一款实用的太阳能充电电路(室内光照可用)

随着物联网的发展&#xff0c;很多智能电子设备都朝着低功耗方向发展&#xff0c;光能&#xff0c;风能&#xff0c;机械能等不同的自然能源都能被利用起来作为电子设备的能量来源&#xff0c;本文要分享一款太阳能充电电路。 前言 大家好&#xff0c;我又来分享电路了&#…

redis的常用基本命令与持久化

文章目录 redis的基本命令1.授权密码2.增加、覆盖、查询、删除、切换库名、移动、清空数据库 Redis持久化RDB模式主动备份自动备份RDB备份过程 AOF备份模式开启AOF备份模式执行流程 总结 redis的基本命令 1.授权密码 config set requirepass 密码设置完密码需要认证密码以后才…

OpenAI劲敌出手!Claude 3正式发布,全面超越GPT-4。Claude3模型特点和使用教程分享

已有GPT官方账号不会升级GPT4请参考&#xff1a;【国内如何用gpt4&#xff1f;如何升级gpt4&#xff1f;保姆级教程】 一、Claude震撼发布焦点分析 1.Claude震撼发布 北京时间2024年3月4日晚间&#xff0c;Anthropic&#xff0c;毫无预警地发布了最新一代大模型Claude 3&…