JVM的知识

什么是JVM

1.JVM:

JVM其实就是运行在 操作系统之上的一个特殊的软件。

2.JVM的内部结构:

(1)因为栈会将执行的程序弹出栈。

(2)垃圾99%的都是在堆和方法区中产生的。

类加载器:加载class文件。

类是模板,是抽象的,只有一个。但是对象是具体的

类加载器的类型:

虚拟器自带加载器

启动类(根)加载器

扩展类加载器

用户类加载器 (找类加载器会一层一层的往上找)

双亲委派机制:为了安全

其原理是:类加载器的查找顺序是按照这样的方式执行的:用户类加载器-> 扩展类加载器-> 启动类加载器 (最终执行)。

如果在启动类加载器和扩展类加载器中都找不到类,就会反过来找,即 启动类加载器-> 扩展类加载器-> 用户类加载器。如果都找不到的话,就会抛出异常,通知子类进行加载。

沙箱安全机制:为了安全

组成:字节码校验器、类装载器(使用的是双亲委派机制)。

Native:

带有native的关键字,说明java的作用达不到了,需要调用底层C语言库,进入本地方法栈。然后本地方法栈调用本地方法接口,进而调用本地方法库。

程序计数器: 线程私有的,就是一个指针,用于指向方法区中字节码。

方法区:

静态变量(static)、常量、类信息以及运行时常量池都放在方法区中。实例化变量存在堆内存中,于方法区无关。

栈:

一种数据结构,先进后出。一旦线程结束,栈就结束了。

三种JVM:

HotSpot

BEA

J9VM JIE

堆:

类加载器读取类文件后,一般在堆中存放引用对象的实例对象,具体是包含类、方法、常量、变量。

堆中分区:

新生区:分为伊甸园区(所有new的对象实例化都是在该区)和幸存者区 (from 和to 它们是可以相互之间进行转化的)

  1. 如果伊甸园区满了就进行轻度垃圾回(GC)收伊甸园区,如果有存活下的对象就进入幸存者区。
  2. 当幸存者区和伊甸园区都满了,就会进行一次重度垃圾回收(full GC),存活下来的程序进入老年区。

如果新生区和老年区都满了,就会出现内存溢出的现象(OOM)的现象。

老年区:
永久区:

jDK1.6之前:永久代,常量放在方法区中

JDK1.7 :永久代,但是逐渐退化

JDK1.8 :去除永久代,使用元空间代替。(逻辑上存在,实际物理层不存元空间)

永久区一般存放JDK自身携带的Class对象interface接口数据、存储java运行时的一些环境和类信息。这个区不存在垃圾回收。

JDK1.8以前的:

轻度垃圾回收:GC

重度垃圾回收:full GC

JVM分配的总内存是电脑内存的1/4,初始化内存大概是1/64。

如果堆出现OOM的情况:试着给堆空间分配更大的的内存。如果还报错就查找代码的错误。

3.GC 介绍和引用计数:

GC的作用区域

4.GC 的算法:

1. 引用计数器

引用计算器:给每个对象加一个计算器,每调用一次就计数加1。没有使用的话就直接清除。缺点是:需要占用额外的空间去计数。

2. 复制算法

复制算法(年轻代主要用的是复制算法):将幸存区(from) 的内容复制到幸存区(to)那边,此时幸存区(from)和幸存区(to)的角色会互换。当对象经历了15GC还没被清除,就会进入养老区。

每次GC后,幸存区to是空的。

好处是:没有碎片。

缺点是:浪费空间,因为幸存区(to) 是

空的。

MaxTenuringThreshold参数讲解 (最大任期)

在GC回收的时候. 如下图详解 From 区和To区 会来回的复制和交换位置. 每交换一次,就会增加一次年龄. 默认交换了15次, 就会从新生代到老年代中去.

3. 标记清除法

好处是:不需要额外的空间,与复制算法相比

缺点是:两次扫描需要时间,会产生内存碎片

4. 标记压缩算法

算法:再次扫描,将内存的碎片进行清除。

好处是:不会产生碎片。

缺点:再次扫描需要时间成本。

5. 标记清除压缩算法

先标记删除,等到几次,再将碎片进行压缩。

总结

年轻代:使用复制算法比较好,因为存活率低。

老年代:标记清除和标记压缩的方法比较好,因为存活率低,尽可能将内存碎片最小化。

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

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

相关文章

花生壳 | ubuntu安装和卸载花生壳

一、到花生壳官网下载linux版本的花生壳 一般下载到Downlaods文件夹 进入文件夹 dpkg -i phddns_5_1_amd64.deb #安装花生壳 dpkg -r phddns #卸载花生壳 登录花生壳管理网站 http://b.oray.com 在Ubuntu中输入命令查看sn码,默认密码为admin phddns status …

年龄大了转嵌入式有机会吗?

有老铁说,我28了,转嵌入式还来得及吗? 其实这个是因人而异的,没有固定说超过多少岁,就不能转了。 我一般不太建议30及以上的转行,第一是30岁才从开始做技术,感觉意义不大。第二是难度大&#xf…

淡旺季酒店价格波动太大,住宿费用怎么管?

受地理位置、季节等因素的影响,部分城市不同季节的酒店价格浮动较大。一线还是二线城市?是淡季还是旺季?价格差距之间可以说是天差地别。 在淡季出差时,按照旺季的标准会导致成本过高,造成资源的浪费。而在旺季出差时&…

python+requests接口自动化测试实战

环境说明: 1.WIN 7, 64位 2.Python3.4.3 (pip-8.1.2) 3.Requests —>pip install requests 4.Unittest —>unittest 框架是python自带的单元测试框架,python2.1及其以后的版本已将unittest作为一个标准块放入python开发包中…

【GPT概念-03】:人工智能中的注意力机制

说明 注意力机制生成分数(通常使用输入函数),确定对每个数据部分的关注程度。这些分数用于创建输入的加权总和,该总和馈送到下一个网络层。这允许模型捕获数据中的上下文和关系,而传统的固定序列处理方法可能会遗漏这…

LeetCode:2617. 网格图中最少访问的格子数(优先级队列 Java)

目录 2617. 网格图中最少访问的格子数 题目描述: 实现代码与解析: 优先级队列 原理思路: 2617. 网格图中最少访问的格子数 题目描述: 给你一个下标从 0 开始的 m x n 整数矩阵 grid 。你一开始的位置在 左上角 格子 (0, 0) 。…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣(LeetCode) 建立一个新的函数,用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题,建立新的函数来传参 多采用使用反对值的方法,因为如果是相等return true的话&am…

芯片公司SAP管理架构:科技与管理的完美融合

在当今日新月异的科技时代,芯片公司作为信息技术领域的核心力量,其运营管理的复杂性日益凸显。SAP管理架构作为一种高效的企业资源规划系统,为芯片公司提供了强大的管理支持。本文将为您科普芯片公司SAP管理架构的相关知识。 SAP管理架构是一…

leetcode每日一题1969

目录 一.题目原型: 二思路解析: 三.代码实现: 一.题目原型: 二思路解析: 灵神的做法非常让人惊叹: 理解就是,如果一个数大于另一个数要交换的1的权重,那么他们的乘积就变小。 那么一个大的数…

React 中的懒加载(Lazy Load)

React 中的懒加载(Lazy Load) 在大型的 React 应用中,为了提高页面加载速度和性能,我们经常会使用懒加载技术来延迟加载组件或资源。懒加载可以将页面初始加载的内容减少到最小,只在需要时再动态加载额外的组件或资源…

js实现hash路由原理

一、简单的上下布局&#xff0c;点击左侧导航&#xff0c;中间内容跟对变化&#xff0c;主要技术使用js检测路由的onhashchange事件 效果图 二、话不多说&#xff0c;直接上代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"…

Wireshark 抓包工具与长ping工具pinginfoview使用,安装包

一、Wireshark使用 打开软件&#xff0c;选择以太网 1、时间设置时间显示格式 这个时间戳不易直观&#xff0c;我们修改 2、抓包使用的命令 1&#xff09;IP地址过滤 ip.addr192.168.1.114 //筛选出源IP或者目的IP地址是192.168.1.114的全部数据包。 ip.sr…

Win10中IIS服务如何部署c#服务

1、将项目打包发布 注意发布位置 2、打开搜索搜索计算机管理 3、点击服务和应用程序 4、点击internet information service 5、点击网站再点击添加网站 6、添加网站名称:opm 添加网站路径(即刚才发布路径) 输入ip地址:自己电脑ip 配置端口号5052 最后点击确认 7、…

vue3中如何实现多个侦听器(watch)

<body> <div id"app"><input type"button" value"更改名字" click"change"> </div> <script src"vue.js"></script> <script>new Vue({el: #app,data: {food: {id: 1,name: 冰激…

类型双关联合体(C++基础)

类型双关 类型双关就是在同样的一个内存中&#xff0c;存储的数据可以用做不同类型的表述。用在底层性能优化的时候&#xff0c;一般使用的时候要非常小心&#xff0c;因为不当的使用可能导致程序的不稳定和不可预测的行为。 int a 5;//double value (double)a;double value…

卷王的自述,我为什么这么卷?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xf…

2024年3月22蚂蚁新村今日答案:以下哪一项是陕西省的非遗美食?

2024年3月22日蚂蚁新村今日问题的正确答案如下&#xff1a; 问题&#xff1a;以下哪一项是陕西省的非遗美食&#xff1f; 选项&#xff1a;驴肉火烧 水盆羊肉 答案&#xff1a;水盆羊肉 解析&#xff1a;水盆羊肉是陕西省的非遗美食。水盆羊肉是陕西省的一道传统著名饭食&a…

2024年Jira全面解析:从 Jira 的概念到优缺点、最新政策

Jira是澳大利亚的Atlassian公司开发的一款项目管理软件&#xff0c;名字来源于日文中“哥斯拉”的称呼“Gojira”。Jira不仅可以追踪缺陷和问题&#xff0c;还能管理项目。很多企业还将JIRA用于一些特殊的场景&#xff0c;比如作为仓库自动化工具、管理文档流程、优化费用等等。…

NCCL 简介

文章目录 前言1. NCCL简介2. 如何使用NCCL 前言 NCCL 源码解析总目录 简单写几个重点。 如有问题&#xff0c;请留言指正。 1. NCCL简介 NCCL主要用来集体通信的&#xff0c;提高多个CUDA设备的通信效率 发展&#xff0c;2.X 主要支持多个节点 NCCL中使用的通信总线…

最快的 Python API 框架之一:简单、现代、高性能 | 开源日报 No.207

tiangolo/fastapi Stars: 68.1k License: MIT fastapi 是一个现代、高性能、易学习、快速编码且适用于生产环境的框架。 其主要功能和核心优势包括&#xff1a; 高性能&#xff1a;与 NodeJS 和 Go 相当&#xff0c;是最快的 Python 框架之一。编码速度快&#xff1a;开发特性…