JVM系统优化实践(1):JVM概览

news2024/9/20 22:27:30

您好,我是湘王,这是我的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的类加载过程回想一遍是怎样的了。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

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

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

相关文章

BCN科研试剂:1263166-91-1,endo BCN-O-PNB,ENDO BCN - 活性酯(P-NPC)

试剂基团反应特点:endo BCN-O-PNB中在有机溶剂中很容易与含胺分子发生反应,PNB 是一个很好的离去基团,BCN 用于无铜点击化学反应。结构式(Structural):基础产品数据:CAS号:1263166-9…

合并两个有序链表——递归解法

题目描述21. 合并两个有序链表难度简单2922收藏分享切换为英文接收动态反馈将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:输入:l1 [1,2,4], l2 [1,3,4]输出:[1,1,2,3,4,4]示例…

【项目精选】基于B2C的网上拍卖系统_秒杀与竞价

点击下载源码 伴随着网络技术的广泛应用和高速发展,随着人们生活节奏的越来越快,越来越多的人们开始在网络中寻求便利。网络购物具备了省时、省事、省心、高效等特点,从而广泛被大众接受,并逐渐渗透到人们的生活中,成为…

当越来越多的企业不再使用FTP,该用什么更好的方案替代?

FTP作为第一个完整的文件传输协议,在互联网技术发展史上具有浓墨重彩的意义,它解决了文件传输协议有无的问题,在全世界范围内被广泛使用。但如今,随着网络技术的发展,企业生产类型和生产资料的丰富化,文件传…

Linux 系统目录结构

登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示: 树状目录结构: 以下是对这些目录的解释: /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里…

米尔电子MYC-YT507H测试u8g2_OLED显示库

最近在测试u8g2库,准备是在单片机上使用的,不过目前我看到其也是支持了linux设备的,所以想着是不是能在T507上跑下。搜了下已经是有人做了移植了。官方现在应该也是支持了的,我选择别人开源的,因为介绍的还比较详细。开…

【基础语法】JavaScript 全栈体系(三)

JavaScript 基础 第三章 常量 一、常量的基本使用 概念:使用 const 声明的变量称为“常量”。使用场景:当某个变量永远不会改变的时候,就可以使用 const 来声明,而不是let。命名规范:和变量一致常量使用 // 声明一…

python 之 海龟绘图(turtle)

注:从个人博客园移植而来 使用简介 python 2.6引入的一个简单的绘图工具,俗称为海龟绘图。3.x以上使用的话,可通过pip进行安装,命令为: pip/pip3 install turtle如果出现如下错误: 解决方式: …

UOS桌面操作系统搭建open vxn服务

UOS系统搭建openVPN一、环境说明二、服务端配置1、软件安装2、创建目录用来存放生成证书中要用到的各种文件3、准备证书生成相关文件4 、准备生成证书用的CSR相关配置5、生成CA证书6、生成服务端证书7、使用CA给服务端证书签名8、生成DH证书9、生成ta密钥10、生成客户端证书&am…

07 二叉树

开始系统学习算法啦!为后面力扣和 蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括 概念, 算法运行过程,以及 代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私…

CHAPTER 1 Web Server - apache(httpd)

Web Server - apache1.1 概念介绍1.1.1 什么是Web Service?1.1.2 什么是Web Server?1.1.3 常见的Web服务程序有哪些?1.2 httpd1.2.1 httpd和apache的区别关系1.2.2 httpd版本介绍1.2.3 httpd安装1. yum 安装2. 编译安装1.3 通过systemctl管理httpd1.3.1 配置文件原因1.3.2 为…

析构函数、拷贝构造

1、析构函数析构函数的定义方式函数名和类名相同,在类名前加~,没有返回值类型,没有函数形参(不能重载)当对象生命周期结束的时候,系统会自动调用析构函数先调用析构函数,再释放对象的空间析构函…

C#中多态、抽象类、虚方法

多态、重装、重写 •多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。抽象类、虚函数、接口三种方法实现的可以是多态性。•重载(overload):对象中同名函数&…

【Galois工具开发之路】给你的JVM安装一个插件~

什么是DCEVM Dcevm(DynamicCode Evolution Virtual Machine)是Java Hostspot的一个扩展插件,属于开源性工具,非JDK官方提供,它允许你在运行环境下修改加载的类文件。当前虚拟机只允许修改方法体(Method&am…

【Python学习笔记】43.Python3 JSON 数据解析及日期和时间

前言 本章介绍python的JSON及日期和时间。 Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。json…

苏宁基于 AI 和图技术的智能监控体系的建设

汤泳,苏宁科技集团智能监控与运维产研中心总监,中国商业联合会智库顾问,致力于海量数据分析、基于深度学习的时间序列分析与预测、自然语言处理和图神经网络的研究。在应用实践中,通过基于 AI 的方式不断完善智能监控体系的建设&a…

C# 业务单据号生成器(定义编号规则、自动获取编号)

系列文章 C#底层库–数据库访问帮助类(MySQL版) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379 C#底层库–JSON帮助类_详细(序列化、反序列化、list、datatable) 本文链接:htt…

用友Java架构师面试

自我介绍。项目中的一些优化。Q:kafka消息的时序性怎么保证?A1: 核心意思就是要实现局部有序,需要有序的消息应设置相同的key,这样通过哈希取模后会分到同一个partition。又因为一个partition只能被一个consumer组中的…

智慧校园信息化管理平台技术方案

1.2总体架构设计 智慧校园平台是以学校现有网络为基础,以服务于全校师生的教学、科研、生活为目的,建立在学校数据中心平台之上,涵盖了学校的学校管理、学生管理、教学管理、班级管理、家校共育、教务管理等全方位的管理信息平台与信息服务平…

阿里P8经验分享 —— 送给想要学习自动化测试的同学6条建议

基于我的经验,送给想要学习自动化测试的同学6条建议 第一条建议:先学习编程语言,然后再接触自动化工具。 语言选择上Java或者Python都是可以的,可以先从Python入手,之后再开始Java。在学习语言的过程中,一…