当前位置: 首页 > news >正文

一零六七、JVM梳理

 

JVM?

Java虚拟机,可以理解为Java程序的运行环境,可以执行Java字节码(Java bytecode)并提供了内存管理、垃圾回收、线程管理等功能

java内存区域划分?每块内存中都对应什么?

  • 方法区:类的结构信息、常量池、静态变量、即时编译器编译后的代码等。
  • 堆:对象实例(堆分为新生代和老生代,新生代对象变化频繁,经常触发GC,老生代变化较缓)。
  • 虚拟机栈:每个方法的局部变量表、操作数栈、动态链接、方法出口等。
  • 本地方法栈:本地方法的调用和执行状态。
  • 程序计数器:当前线程执行的字节码指令地址。

总结:   

        新生代又分为Eden空间、Survivor空间,Survivor空间又有Survivor1和Survivor2,大部分对象首先被分配到新生代的Eden空间,经过一次垃圾回收后,如果存活则进入Survivor空间,经过多次回收后仍然存活的对象会被晋升到老年代。

一个类的加载流程?

  1. 加载(Loading):加载是类加载的第一阶段。在此阶段,类加载器通过类的全限定名(Fully Qualified Name)来查找并读取类的字节码文件(通常是以.class文件形式存储的)。类加载器可以从文件系统、网络、JAR包等位置获取字节码文件的二进制数据,并将其转换成内部数据结构表示的类。

  2. 验证(Verification):验证是类加载的第二阶段。在此阶段,虚拟机会对字节码进行合法性校验,确保字节码符合Java语言规范和虚拟机规范,避免安全漏洞和不合规的字节码引起的问题。

  3. 准备(Preparation):准备是类加载的第三阶段。在此阶段,虚拟机为类的静态变量分配内存,并设置默认初始值(零值),例如0、null等。这些静态变量通常存储在方法区中。

  4. 解析(Resolution):解析是类加载的第四阶段。在此阶段,虚拟机会将类中的符号引用转换为直接引用。符号引用指向类、字段、方法等在运行时才能确定具体内存地址的符号,而直接引用则直接指向内存中的对象、方法等。

  5. 初始化(Initialization):初始化是类加载的最后一阶段。在此阶段,虚拟机会执行类的初始化代码,包括静态变量赋值和静态代码块的执行。初始化时,按照静态变量定义的顺序依次执行,并且是线程安全的。初始化完成后,类被标记为已初始化,可以使用了。

垃圾回收算法有哪些?

  • 标记清除法,首先,从根对象(gc root)开始标记所有可达对象,即从根对象出发遍历对象图,并给可达对象打上标记。然后,在清除阶段,遍历整个堆内存,将未标记的对象进行回收。标记-清除算法可以解决循环引用的问题,但容易产生内存碎片。
  • 标记整理法,为了解决复制和清除算法的缺陷,在回收垃圾后会向内存—边整理对象,这会栖牲比较多的性能。
  • 复制算法,该算法将内存分为两个区域,一半为活动区(From Space),一半为空闲区(To Space)。在垃圾回收过程中,将活动区中存活的对象复制到空闲区,并更新引用关系。最后,交换两个区域的角色,即将空闲区变为活动区,原活动区变为空闲区。该算法简单高效,但对内存利用率较低。
  • 分代算法,通常将新创建的对象放入新生代(Young Generation),经过多次垃圾回收仍存活的对象会被晋升到老年代(Old Generation)。新生代采用复制算法,而老年代采用标记整理算法。这样能够根据对象的特性进行不同的优化,提高垃圾回收的效率。

总结:

        标记删除,实现简单,但是删除过后容易产生内存碎片。复制算法,解决了内存碎片的问题,同是也是比较高效的回收算法,但是使用了比较高昂的内存空间作为代价。标记整理算法,为了解决复制和清除算法的缺陷,在回收垃圾后会向内存—边整理对象,这会栖牲比较多的性能。分代算法是把内存空间划分为不同代,新生代和老年代。每个代因其功能职责不同采用不同的垃圾回收算法,新生代因为对象朝生夕死所以采用复制算法,提高回收效率,老年代则采用标记整理。

什么是双亲委派机制?

当一个类加载器需要加载某个类时,它首先会将该请求委派给它的父加载器,只有在父加载器无法完成加载时,才由子加载器自行加载。

总结:

        通过双亲委派机制,Java类加载器构成了一个层次结构,形成了一种从上到下的类加载器链。这种结构保证了类的一致性和稳定性,并且可以防止用户自定义的类库覆盖Java核心类库的安全问题。当一个类被加载后,它会由加载它的类加载器和它的类本身共同确定其在虚拟机中的唯一性。

如何主动触发垃圾回收?

System.gc()方法是一个静态方法,它会通知JVM进行垃圾回收操作。实际上,这只是一个建议,具体是否进行垃圾回收还是取决于JVM的内部策略。JVM可能会选择立即执行垃圾回收,也可能会忽略该建议。

另外,Java虚拟机提供了一个Runtime类,它有一个gc()方法,与System.gc()具有相同的功能。你可以使用Runtime.getRuntime().gc()来调用垃圾回收。

需要注意的是,频繁地手动触发垃圾回收并不是一个好的做法。JVM通常会根据当前系统资源的使用情况和垃圾回收算法的策略自动进行垃圾回收,手动触发垃圾回收可能会导致不必要的性能开销。通常情况下,我们应该信任JVM的垃圾回收机制,并正确管理对象的生命周期,让JVM自己来决定何时进行垃圾回收。

什么是young GC?什么是full GC?什么是stw?
        young GC 就是新生代的垃圾回收,比较频繁,full GC是老生代的垃圾回收,效率比较低,并且会触发 stw,stw就是除了垃圾回收这个线程其他线程都停止。


相关文章:

一零六七、JVM梳理

JVM? Java虚拟机,可以理解为Java程序的运行环境,可以执行Java字节码(Java bytecode)并提供了内存管理、垃圾回收、线程管理等功能 java内存区域划分?每块内存中都对应什么? 方法区:类的结构信息、常量池、…...

【CSS】网格布局(简单布局、网格合并、网格嵌套)

文章目录 CSS网格布局(Grid Layout)1. 简单布局2. 网格合并3. 网格嵌套4. 总结 CSS网格布局(Grid Layout) CSS网格布局(Grid Layout)是一种强大且灵活的CSS布局系统,允许开发者以网格形式组织和…...

06 Ubuntu22.04上的miniconda3安装、深度学习常用环境配置

下载脚本 我依然是在清华镜像当中寻找的脚本。这里找脚本真的十分方便,我十分推荐。 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 下载十分快速,10秒解决问题 运行miniconda3安装脚本 赋予执…...

【CSS3】CSS3 动画 ② ( 动画序列 | 使用 from 和 to 定义动画序列 | 定义多个动画节点 | 代码示例 )

文章目录 一、动画序列二、代码示例 - 使用 from 和 to 定义动画序列三、代码示例 - 定义多个动画节点 一、动画序列 定义动画时 , 需要设置动画序列 , 下面的 0% 和 100% 设置的是 动画 在 运行到某个 百分比节点时 的 标签元素样式状态 ; keyframes element-move { 0% { tr…...

最优化:建模、算法与理论

最优化:建模、算法与理论 目前在学习 最优化:建模、算法与理论这本书,来此记录一下,顺便做一些笔记,在其中我也会加一些自己的理解,尽量写的不会那么的条条框框(当然最基础的还是要有&#xff…...

拿捏--->打印菱形

文章目录 题目描述算法思路代码示例 题目描述 在屏幕上输出以下图案&#xff1a; 算法思路 代码示例 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {int n;scanf("%d", &n);//上半部分菱形for (int i 0; i < n; i) //上半部分…...

【SpringBoot笔记】定时任务(cron)

定时任务就是在固定的时间执行某个程序&#xff0c;闹钟的作用。 1.在启动类上添加注解 EnableScheduling 2.创建定时任务类 在这个类里面使用表达式设置什么时候执行 cron 表达式&#xff08;也叫七子表达式&#xff09;&#xff0c;设置执行规则 package com.Lijibai.s…...

Redis单机,主从,哨兵,集群四大模式

Redis 单机模式 Redis 单机模式是指 Redis 数据库在单个服务器上以独立的、单一的进程运行的模式。在这种模式下&#xff0c;Redis 不涉及数据分片或集群配置&#xff0c;所有的数据和操作都在一个实例中进行。以下是关于 Redis 单机模式的详细介绍&#xff1a; 单一实例&#…...

2023年8月份华为H12-811更新了

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…...

[K8S:命令执行:权限异常:解决篇]:通过更新kubeconfig配置相关信息

文章目录 一&#xff1a;场景复现&#xff1a;1.1&#xff1a;关键信息&#xff1a;1.2&#xff1a;全异常日志输出&#xff1a; 二&#xff1a;解决流程&#xff1a;2.1&#xff1a;更新 kubeconfig&#xff1a;2.1.1&#xff1a;执行命令&#xff1a; 2.2&#xff1a;再次执行…...

帆软设计器报表加载不出折线图的原因

最近在用帆软设计器做可视化图表。偶有遇到因为数据集的字段类型导致加载不出折线&#xff0c;现记录如下。做报表的同行可以参考。 数据库使用了 Oracle 11g。数据集的 SQL 代码片是之前用在另一个单元格报表里面的。页面上有一个率是直接计算得出&#xff0c;我为了方便、就…...

[QCA6174]sdx12平台WiFi QCA6174在驱动加载的时候增加模块参数方法

需求描述 由于开发需要,有时候需要在驱动模块加载的时候增加一个参数,传递给到驱动使用 平台描述 Qualcomm SDX12+QCA6174平台 驱动信息 [ 112.281429] wlan: loading driver v4.0.11.213X [ 112.340262] msm_pcie_enable: PCIe: Assert the reset of endpoint of RC0. …...

Ajax-AJAX请求的不同发送方式

&#x1f954;&#xff1a;你一定能成为想要成为的人 发送AJAX请求不同方式 发送AJAX请求不同方式1、jQuery发送AJAX请求2、axios发送AJAX请求&#xff08;重点&#xff09;3、fetch发送AJAX请求 发送AJAX请求不同方式 1、jQuery发送AJAX请求 首先需要jquery的js文件&#xf…...

简易图书管理系统(面向对象思想)

目录 前言 1.整体思路 2.Book包 2.1Book类 2.2BookList类 3.user包 3.1User类 3.2NormalUser类 3.3AdminUser类 4.operation 4.1IOPeration接口 4.2ExitOperation类 4.3FindOperation类 4.4ShowOperation类 4.5AddOperation类 4.6DelOperation类 4.7BorrowOpera…...

C++ 函数模板与类模板

C最重要的特性之一就是代码重用&#xff0c;为了实现代码重用&#xff0c;代码必须具有通用性。通用代码应不受数据类型的影响&#xff0c;并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C支持参数化程序设计的工具&#xff0c;通过它可以实现参…...

Tailwind CSS:简洁高效的工具,提升前端开发体验

112. Tailwind CSS&#xff1a;简洁高效的工具&#xff0c;提升前端开发体验 1. 什么是Tailwind CSS&#xff1f; Tailwind CSS是由Adam Wathan、Jonathan Reinink、David Hemphill和Steve Schoger等人共同创建的一种现代CSS框架。与传统的CSS框架不同&#xff0c;Tailwind CS…...

NR CSI(六) CSI reporting using PUCCH

之前NR CSI(二) the workflow of CSI report有对CSI report的相关流程进行介绍&#xff0c;而这篇主要看下CSI reporting over PUCCH的相关规定。 CSI report在PUCCH上传输的场景如上表红色字体&#xff0c;有三种场景&#xff0c;具体的对应的是Periodic 和Semi-Persistent CS…...

论文阅读---《Unsupervised Transformer-Based Anomaly Detection in ECG Signals》

题目&#xff1a;基于Transformer的无监督心电图&#xff08;ECG&#xff09;信号异常检测 摘要 异常检测是数据处理中的一个基本问题&#xff0c;它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易&#xff0c;然而&#xff…...

5G上行干扰规避的参数策略

LNR干扰避让 1. 干扰避让特性 D1/D2干扰避让&#xff1a;干扰与非干扰带宽独立测量&#xff0c;避免部分频带受干扰拉低整个带宽MCS&#xff0c;基于测量结果&#xff0c; 用户级自适应调度60/80/100M&#xff0c;躲避干扰频带。 窄带干扰避让&#xff1a;避免部分带宽的干扰对…...

CTF流量题解tcp1

用流量工具进行分析。发现消息长度有点异常。右键TCP跟踪。 ....mos.-mos-.-.mos-.-mos..-.mos..-mos-. 摩斯密码生成-网页工具 (adminun.com)...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...