JVM系统优化实践(1):JVM概览
您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~
这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧。
目前大多数Java工程师都面临一个共同的问题:对JVM的了解非常贫乏,尤其是对实际生产环境中的优化几乎就是完全没有任何经验。加上JVM的相关资料也较为稀缺,完全没有任何真正系统化讲解JVM生产实践的技术资料。
这里聚集了多个真实的JVM优化案例,每个案例都从背景开始,通过现场故障还原,一步步分析、排查和定位每个问题,包括解决问题的过程中涉及到的底层JVM原理的剖析。同时通过大量真实案例的手动实践和演练,逐步积累起丰富的排查经验。
通过这种分析、思考、动手及反复练习的方式,培养工程师的思维能力和动手能力,最终让每个工程师都有如下能力:
1、可以在指导和协助下完成所负责项目的JVM优化;
2、遇到线上生产环境问题,至少可以有思路、方法和手段去定位、分析、排查、解决,而不是茫然无措;
3、清楚该怎么动手,也明白背后的JVM底层原理;
4、至少有一些真实或接近真实案例的经验积累。
启动一个JVM进程时,JVM会经历如下过程:

也就是:

当需要用到它的时候再加载,而不是从一开始就加载进来。这其实就是单例模式中的「懒汉模式」:

在验证阶段,JVM会校验加载进来的.class文件是否符合规范:

验证完毕之后,在准备阶段会给类及(包括static修饰的)变量分配内存空间(仅仅是分配并给一个默认的初始值):

而到了解析阶段,会把符号引用替换为直接引用:
所以,在初始化阶段,JVM会进行类初始化及准备静态代码块(准备阶段的变量在此赋值)。那什么时候初始化一个类呢?以下时机一定会进行初始化动作:
1、new Object();
2、包含main()方法的类;
3、如果某个类的父类还未初始化,那就必须要先初始化其父类。
初始化过程:

到了类加载器这一步,Java中有这么几种类加载器:

1、Bootstrap ClassLoader:启动类加载器,加载Java核心类(lib中的类);
2、Extension ClassLoader:扩展类加载器,加载lib\ext中的类;
3、Application ClassLoader:应用程序类加载器,加载ClassPath环境变量;所指定路径中的类;
4、自定义类加载器:根据用户自定义需求加载类。
这会涉及到JVM的「双亲委派机制」。所谓「双亲委派机制」就是:
1、先顺着继承结构往上,由父类加载所需要的类;
2、当父类没找到要加载的类时,再顺着集成结构向下,由子类加载。

OK,看到这里,可以再把JVM的类加载过程回想一遍是怎样的了。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~
相关文章:
JVM系统优化实践(1):JVM概览
您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧。目前大多…...
优秀!19年后,它再次成为TIOBE年度编程语言
新年伊始,TIOBE发布了2022年度编程语言,C时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C便成为年度编程语言。2022年,C获得了最高的人气4.62%,紧随其后的是…...
剑指 Offer 26. 树的子结构
摘要 剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),B是A的子结构, 即 A中有出现和B相同的结构和节点值。 一、子树解析 思路解析:若树B是树A的子结构,则…...
他是00年的,我们卷不过他...
现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...
C#开发的OpenRA的OpenGL创建纹理流程
C#开发的OpenRA的OpenGL创建纹理流程 由于OpenRA采用的是OpenGL来显示游戏画面, 那么它就必然采用纹理来显示了。 并且由于它是2D的游戏,所以3D的模型是没有的,只要使用纹理贴图,就可以完全实现了游戏的功能。 OpenGL的纹理要起作用,需要经过一系列的动作。 先要使用glGen…...
3D目标检测(一)—— 基于Point-Based方法的PointNet系列
3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 目录 3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 前言 零、网络使用算法 …...
《设计模式》策略模式
策略模式 前言 先了解一下设计模式的几种类似: 行为型设计模式(Behavioral Design Pattern)是指一组设计模式,它们关注的是对象之间的通信和协作。行为型设计模式描述了对象之间的职责分配和算法的封装,以及如何在运…...
【离散数学】1. 数理逻辑
1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学:研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑:研究推理的科学 数学方法:引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学,即使用符号化…...
Java8新特性学习
Java8新特性学习为啥使用Lambda表达式Lambda表达式的基础语法无参无返回有参无返回一个参数多参单个语句体类型推断四大内置核心函数式接口其他接口方法引用与构造器引用Stream简介什么是StreamStream操作步骤创建Stream中间操作终止操作(终端操作)归约与收集并行流…...
SPARK outputDeterministicLevel的作用--任务全部重试或者部分重试
背景 目前spark的repartition()方法是随机分配数据到下游,这会导致一个问题,有时候如果我们用repartition方法的时候,如果任务发生了重试,就有可能导致任务的数据不准确,那这个时候改怎么解决这个问题呢? …...
图数据库中的 OLTP 与 OLAP 融合实践
在一些图计算的场景下,我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路,希望给你带来一点启发。 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的图系统,经过反复测试无误后已…...
Shader Graph简介
使用着色器(shader)和材质(material),我们能够创造出非常多有趣的效果。除了Unity自带的shader外,还可以自己编写shader或使用其他人所编写的shader。编写shader通常需要我们了解shader编程语言的语法和相关…...
kubectl
目录 一、陈述式资源管理方法 二、基本信息查看 2.1 基本信息查看格式 2.2 查看master节点组件状态 2.3 查看命名空间 2.4 创建/查看命名空间 2.5 删除(重启)命名空间/pod 2.6 查看资源的详细信息 2.7 创建副本控制器来启动Pod 2.8 查看指定命…...
实验室设计SICOLAB第三方检测中心实验室设计
第三方检测中心实验室怎么设计?详细设计内容有哪些?功能区域有哪些?仪器有哪些?要多少面积?第三方检测中心实验室是一种独立的实验室,为客户提供各种测试和分析服务。以下是一个第三方检测中心实验室的详细…...
GPS经纬度转距离
function [pN, pE] distance_gps(lon1, lon2, lat1, lat2)d2r pi/180; % deg转radR 6371000.0; % 地球半径pN (lat2 - lat1) * d2r * R;pE (lon2 - lon1) * d2r * R * cos(lat2 * d2r); end...
7-周赛333总结
7-周赛333总结 还是只过了前两题,第三题又写了好久好久,然后也不知道错在了哪里,只过了部分题解,也许是思考不全面吧。下次也许先做第四题更好…第四题今天花了点时间 做出来了个大概 开心 :happy: 合并两个二维数组 - 求和法【…...
电子招标采购系统源码—互联网+招标采购
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明,可…...
SQL注入和XSS攻击
1、SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输…...
js Map的使用
前言:Map数据集可以理解为加强版的对象 一、for...of 1、对象不能用于for of,因其没有部署Iterator接口;其他数据集如:数组、Map、Set、Iterator对象等都可以用for...of2、使用for...of的优势: for of的循环体中可以…...
企业应该怎么管理香港服务器?
做好服务器管理,往往能为站长避免很多麻烦。用户租用服务器,除了希望它快速而安全,还有就是如何才能得到优质及时的售后和指导建议了。服务器供应商只提供服务器管理的基础服务,负责提供硬件、带宽和电力等服务,服务器…...
OpenClaw学习路径:从Phi-3-mini-128k-instruct对接到复杂自动化编排
OpenClaw学习路径:从Phi-3-mini-128k-instruct对接到复杂自动化编排 1. 为什么选择OpenClawPhi-3-mini组合 去年我在整理学术文献时,每天要花3小时重复操作:下载PDF→提取关键段落→归类到不同主题文件夹→生成摘要。直到发现OpenClaw这个能…...
修改 WindTerm 快捷键配置为Ctrl+V / Ctrl+C
为了让 复制 / 粘贴 的快捷键更符合 Windows 的使用习惯,可以按下面的方法修改 WindTerm 的配置文件。 一、找到配置文件 先进入 WindTerm 的安装目录,然后依次打开: global 文件夹 在该文件夹中找到以下配置文件之一: wind.keyma…...
3个步骤彻底释放惠普游戏本性能:OmenSuperHub终极指南
3个步骤彻底释放惠普游戏本性能:OmenSuperHub终极指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方Omen Gaming Hub的臃肿体积和…...
BROADCOM博通集成 Matter 1.5平台认证就绪、BK7239N等芯片助力智能家居无缝融合
博通集成多款Wi-Fi SoC的Matter SDK平台已全面完成对Matter v1.5标准的支持,并通过Matter兼容性平台认证。此举标志着Beken芯片方案持续可为客户提供“开箱即用”的Matter开发体验,助力设备制造商高效推出符合最新统一标准的智能产品。随着Matter生态的快…...
从PyTorch/Onnx、AIMET量化到 QNN GPU 部署全流程实战:GPU 推理 300FPS+
YOLOv8s 从 AIMET 量化到 QNN GPU 部署全流程实战、GPU 推理 3ms/帧 1. 环境准备 组件 版本/路径 QNN SDK v2.45.0.260326 Android NDK r26d 目标设备 Qualcomm SM8750 目标架构 aarch64-android export QNN_TARGET_ARCH="aarch64-android" export NDK_ROOT=/home/mi…...
C++的std--ranges适配器视图迭代器失效规则与悬垂引用
C的std::ranges适配器视图迭代器失效规则与悬垂引用 现代C引入了std::ranges库,为算法和范围操作提供了更强大的支持。使用适配器视图时,迭代器失效和悬垂引用问题可能成为隐藏的陷阱。理解这些规则对编写安全高效的代码至关重要。 视图的惰性求值特性…...
如何确保Kando在Windows上的安全性?完整代码签名验证指南
如何确保Kando在Windows上的安全性?完整代码签名验证指南 【免费下载链接】kando 🌸 Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款高效的快捷操作工具,通过直观的饼图菜单帮助用…...
工业机器人离线编程与仿真——RobotStudio基础学习3.27
工业机器人离线编程与仿真——RobotStudio基础学习 一、工业机器人离线编程认知 1.1 工业机器人常用编程方法 工业机器人主流编程方法分为示教编程和离线编程两类,二者核心差异体现在编程环境、对生产的影响等方面,具体对比见下表: 示教编…...
TEKLauncher:如何通过三重技术架构重新定义《方舟:生存进化》的游戏管理体验
TEKLauncher:如何通过三重技术架构重新定义《方舟:生存进化》的游戏管理体验 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher TEKLauncher是一个专为《方舟ÿ…...
新手零失败指南:在快马平台跟做交互式openclaw安装教程
最近在折腾一个叫openclaw的工具,作为新手被各种依赖和报错折磨得够呛。后来发现用InsCode(快马)平台可以把这个过程变成交互式教程,特别适合像我这样刚入门的小白。这里把踩坑经验整理成笔记,手把手带你零失败完成安装。 为什么选择交互式安…...
