JVM的知识

news2024/11/17 1:32:19

什么是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. 标记清除压缩算法

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

总结

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

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

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

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

相关文章

芯片中小公司ERP系统的业务流程:揭秘数字化管理的新篇章

随着信息技术的飞速发展,ERP(企业资源规划)系统已成为众多企业实现数字化管理的重要工具。对于芯片中小公司而言,ERP系统更是提升运营效率、优化资源配置的关键所在。那么,芯片中小公司的ERP系统究竟是如何运作的呢?让我们一同揭开其业务流程…

Spatialite坐标投影并计算面积

将坐标转为WGS_1984_UTM_Zone_48N(32648)后再计算其面积: -- 转换坐标系并计算面积(平方米) SELECT ST_Area(ST_Transform(GeomFromText(POLYGON((106.763 26.653, 106.763 26.626, 106.815 26.625, 106.809 26.666, …

我们使用 Postgres 构建多租户 SaaS 服务时踩的坑

原文 Our Multi-tenancy Journey with Postgres Schemas and Apartment。这篇和之前发出的「如何使用 Postgres 对一个多租户应用分片」相呼应。 多租户 (Multip-tenancy) 是当下的热门话题。我对多租户应用程序的定义是一个能够服务于多个客户的软件系统,每个客户都…

有名的爬虫框架 colly 的特性及2个详细采集案例

一. Colly概述 前言:colly 是 Go 实现的比较有名的一款爬虫框架,而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速,设计非常优雅,并且分布式的支持也非常简单,易于扩展。 框架简…

javaSSM游泳馆日常管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM游泳馆日常管理系统是一套完善的完整企业内部系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发)MAVEN方式加载,系统具有完整的源代码和…

疫情居家办公OA系统设计与实现| Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,…

day04套餐管理模块所有业务功能代码开发

目录 1. 新增套餐1.1 需求分析和设计1.2 代码实现1.2.1 DishController1.2.2 DishService1.2.3 DishServiceImpl1.2.4 DishMapper1.2.5 DishMapper.xml1.2.6 SetmealController1.2.7 SetmealService1.2.8 SetmealServiceImpl1.2.9 SetmealMapper1.2.10 SetmealMapper.xml1.2.11…

shell脚本入门练习(非常详细)零基础入门到精通,收藏这一篇就够了

【脚本1】打印形状 打印等腰三角形、直角三角形、倒直角三角形、菱形 #!/bin/bash \# 等腰三角形 read \-p "Please input the length: " n for i in \seq 1 $n\ do for ((j\$n;j>i;j--)) do echo \-n " " done for m in \seq 1 $i\ do…

希尔伯特-黄变换(Hilbert-Huang Transform, HHT)详解

目录 经验模态分解(EMD) 希尔伯特谱分析(HSA) 定义 连续时信号的Hilbert变换定义 离散时信号的Hilbert变换定义 解析信号定义: 解析信号的傅里叶变换 解析信号的重要意义 解析信号的属性 希尔伯特--黄变换(…

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及,充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台,设计了一套电动汽车直流充电桩监控系统,能实时监测充电桩的温度、电压和电流,并进行数…

Geohash编码

1. 简介 地理位置(经纬度坐标对)编码为字母数字串,将空间分为网格形状每个网格使用一个编码,是Z阶曲线的众多应用之一。 2. 编码原理 (1) 首先根据区域划分的精度大小选择Geohash的字符串的长度&#xf…

[DDD] ValueObject的一种设计落地及应用

目录 前言一、ValueObject二、设计2.1 接口2.2 单一值ValueObject2.3 单一字符串ValueObject 三、实现3.1 示例3.1.1 PhoneNumber3.1.2 SocialCreditCode 四、使用4.1 异常处理4.2 Json 反/序列化4.2.1 请求体4.2.2 HTTP接口4.2.3 用例 4.3 JPA/MyBatis4.3.1 Converter或TypeHa…

HarmonyOS实战开发-如何使用首选项能力实现一个简单示例。

介绍 本篇Codelab是基于HarmonyOS的首选项能力实现的一个简单示例。实现如下功能: 创建首选项数据文件。将用户输入的水果名称和数量,写入到首选项数据库。读取首选项数据库中的数据。删除首选项数据文件。 最终效果图如下: 相关概念 首选…

第二证券|基本面向好预期强化 全球资本加紧布局A股

开年以来,在我国经济上升向好的态势持续稳固增强的大布景下,结合各方努力,A股商场企稳上升痕迹明显。受一系列稳定商场预期政策出台的加持,全球本钱正在加速布局A股商场。 业界人士指出,当时我国本钱商场依然具有明显…

QT(6.5) cmake构建C++编程,调用python (已更新:2024.3.23晚)

一、注意事项 explicit c中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色,构造器、类型转换操作符, c提供关键字explicit,阻止转换构造函数进行的隐式转换的发生&#…

jvm底层

逐步细化 静态链接:静态方法(符号引用)替换为内存指针或者句柄直接引用) 动态链接:程序期间将符号引用替换为直接引用 对象头: 指针压缩: -XX:UseCompressedOops 开启指针压缩 减少内存消耗;大指针在主内存 缓存间移…

人脸聚类原理和算法解释

人脸聚类是指将大量人脸图像根据它们的相似性分组到不同的群集中的过程。人脸聚类通常利用人脸的特征向量表示来度量人脸之间的相似性,并将相似的人脸图像聚集在一起。 以下是人脸聚类的一般原理: 人脸特征提取:对每张人脸图像提取特征向量。…

上海市开展专项行动,提升车联网行业网络和数据安全防护水平

近日,上海市通信管理局发布了《关于开展“铸盾车联”2024年车联网网络和数据安全专项行动的通知》。通知中提到,此次专项行动是为了提升本市车联网行业网络和数据安全防护水平,筑牢车联网网络和数据安全防线,护航智能网联汽车产业…

Spring之事务原理篇

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:Github传送门 🍹 本人24应届生一枚,技术和水平有…

opencv各个模块介绍(1)

Core 模块:核心模块,提供了基本的数据结构和功能。 常用的核心函数: cv::Mat:表示多维数组的数据结构,是OpenCV中最常用的类之一,用于存储图像数据和进行矩阵运算。 cv::Scalar:用于表示多通道…