当前位置: 首页 > 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)...

WordPress建站避坑指南:Ubuntu服务器常见权限问题与安全配置

WordPress建站避坑指南&#xff1a;Ubuntu服务器常见权限问题与安全配置 引言&#xff1a;为什么你的WordPress网站总出问题&#xff1f; 每次看到新手开发者兴奋地宣布"我的WordPress网站上线了"&#xff0c;我都忍不住想问&#xff1a;你真的检查过文件权限了吗&am…...

OpenClaw多任务调度:nanobot并行处理邮件与文件整理

OpenClaw多任务调度&#xff1a;nanobot并行处理邮件与文件整理 1. 为什么需要多任务调度 当我第一次尝试用OpenClaw自动化处理日常工作流时&#xff0c;遇到了一个典型问题&#xff1a;当同时需要监控邮件和处理大文件时&#xff0c;系统资源会被单一任务占满。比如在整理几…...

nomic-embed-text-v2-moe保姆级教程:Gradio自定义CSS主题与响应式布局

nomic-embed-text-v2-moe保姆级教程&#xff1a;Gradio自定义CSS主题与响应式布局 1. 从零开始&#xff1a;认识nomic-embed-text-v2-moe 如果你正在寻找一个既强大又好用的文本嵌入模型&#xff0c;特别是需要处理多语言内容&#xff0c;那么nomic-embed-text-v2-moe绝对值得…...

StructBERT-Large本地化部署实战:无需联网、不传数据、隐私安全的语义匹配解决方案

StructBERT-Large本地化部署实战&#xff1a;无需联网、不传数据、隐私安全的语义匹配解决方案 你是不是经常需要判断两句话是不是一个意思&#xff1f;比如&#xff0c;检查用户提交的答案是否和标准答案一致&#xff0c;或者判断两篇新闻稿是不是在说同一件事。过去&#xf…...

【学术干货免费领】200+学术海报模板免费领|科研展示零成本,高效出图不内耗 | 学术会议海报模板,适配国际国内各类学术场合 | 硕博研究生必需,全学科适配,助力科研成果高光出圈

重磅福利来袭&#xff01;200学术海报模板&#xff0c;全程免费领取&#xff0c;零成本解锁科研展示新方式&#xff01;适配以下各类科研相关人群&#xff1a;硕博研究生群体包括硕士研究生和博士研究生适用于不同研究阶段&#xff1a;从开题报告撰写到学位论文完成特别适合需要…...

突破透明动画性能瓶颈:VAP引擎实现移动端高效视觉体验

突破透明动画性能瓶颈&#xff1a;VAP引擎实现移动端高效视觉体验 【免费下载链接】vap VAP是企鹅电竞开发&#xff0c;用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap …...

易语言实现阶乘与组合数计算

是的&#xff0c;我听说过易语言&#xff0c;它是一款面向中文使用者的编程语言&#xff0c;以其直观的中文语法和图形化界面开发能力而著称。 一、 数学概念解析 在深入编程实现前&#xff0c;我们先明确两个基础的数学概念。 1. 阶乘 阶乘 是所有小于及等于该数的正整数的…...

HybridCLR Generate All报错终极解决指南:UnityLinker.exe找不到HotUpdate.dll怎么办?

HybridCLR Generate All报错终极解决指南&#xff1a;UnityLinker.exe找不到HotUpdate.dll怎么办&#xff1f; 当你正在使用HybridCLR进行Unity热更新开发时&#xff0c;突然遇到Generate All报错&#xff0c;提示UnityLinker.exe无法解析HotUpdate.dll&#xff0c;这确实会让人…...

Fast-GitHub:突破网络瓶颈的开发效率工具解决方案

Fast-GitHub&#xff1a;突破网络瓶颈的开发效率工具解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 1 痛点直击&#xff…...

数据稠密计算的算法优化:从理论到实践

数据稠密计算的算法优化&#xff1a;从理论到实践 引言 作为一名在数据深渊里捞了十几年 Bug 的女码农&#xff0c;我见过太多因为算法选择不当导致的性能问题。在数据稠密计算中&#xff0c;算法的选择和优化是提升计算性能的关键因素之一。今天&#xff0c;我们来聊聊数据稠密…...