首页 > 其他分享 >JVM系统优化实践(1):JVM概览

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

时间:2023-02-19 23:32:00浏览次数:40  
标签:初始化 乐乐 Java ClassLoader 概览 JVM 系统优化 加载

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~




这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧。

目前大多数Java工程师都面临一个共同的问题:对JVM的了解非常贫乏,尤其是对实际生产环境中的优化几乎就是完全没有任何经验。加上JVM的相关资料也较为稀缺,完全没有任何真正系统化讲解JVM生产实践的技术资料。

这里聚集了多个真实的JVM优化案例,每个案例都从背景开始,通过现场故障还原,一步步分析、排查和定位每个问题,包括解决问题的过程中涉及到的底层JVM原理的剖析。同时通过大量真实案例的手动实践和演练,逐步积累起丰富的排查经验。

通过这种分析、思考、动手及反复练习的方式,培养工程师的思维能力和动手能力,最终让每个工程师都有如下能力:

1、可以在指导和协助下完成所负责项目的JVM优化;

2、遇到线上生产环境问题,至少可以有思路、方法和手段去定位、分析、排查、解决,而不是茫然无措;

3、清楚该怎么动手,也明白背后的JVM底层原理;

4、至少有一些真实或接近真实案例的经验积累。

启动一个JVM进程时,JVM会经历如下过程:

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


也就是:

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


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

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


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

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


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

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


而到了解析阶段,会把符号引用替换为直接引用:

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


所以,在初始化阶段,JVM会进行类初始化及准备静态代码块(准备阶段的变量在此赋值)。那什么时候初始化一个类呢?以下时机一定会进行初始化动作:

1、new Object();

2、包含main()方法的类;

3、如果某个类的父类还未初始化,那就必须要先初始化其父类。

初始化过程:

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


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

1、Bootstrap ClassLoader:启动类加载器,加载Java核心类(lib中的类);

2、Extension ClassLoader:扩展类加载器,加载lib\ext中的类;

3、Application ClassLoader:应用程序类加载器,加载ClassPath环境变量;所指定路径中的类;

4、自定义类加载器:根据用户自定义需求加载类。

这会涉及到JVM的「双亲委派机制」。所谓「双亲委派机制」就是:

1、先顺着继承结构往上,由父类加载所需要的类;

2、当父类没找到要加载的类时,再顺着集成结构向下,由子类加载。

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


OK,看到这里,可以再把JVM的类加载过程回想一遍是怎样的了。




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

标签:初始化,乐乐,Java,ClassLoader,概览,JVM,系统优化,加载
From: https://blog.51cto.com/u_15817148/6066970

相关文章

  • JVM系统优化实践(1):JVM概览
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧......
  • JDK、JRE、JVM
    JDK:JavaDevelopmentKit(java开发者工具)JRE:JavaRuntimeEnvironment(java运行时环境)JVM:JAVA VirtualMachine(java虚拟机) ......
  • JVM解释器与JIT编译器如何并存?
    [1]JVM解释器  JVM设计的初衷仅仅只是为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节......
  • JVM内存模型分析
    JVMJVM内存模型解析JVM内存模型:https://juejin.cn/post/7024358170642350093https://www.cnblogs.com/blknemo/p/13296007.html线程独占:JVM栈,本地方法栈,程序计数......
  • JVM中的GC系统
    什么是GC?GC(GarbageCollection)称之为垃圾回收,在JVM的执行引擎中自带这样的一个GC系统,此系统会按照一定的算法对内存进行监控和垃圾回收。如何判断哪些对象是垃圾?1、引用......
  • JVM初始化一个类包含几个步骤?
    加入这个类还没有被加载和连接,则程序先加载并连接该类加入该类的直接父类还没有初始化,则先初始化其直接父类加入类有初始化语句,则系统依次执行这些初始化语句当执行第......
  • 第一周复习笔记(MySQL、Redis、JVM、JUC)
    MySQL1.引擎1.1Innodb和MyIsAM的区别1.2Innodb的逻辑存储结构2.索引2.1索引的分类2.2索引优化2.3索引失效的场景3.事务3.1事务的隔离级别3.2ACID原则......
  • 谈JVM参数GC线程数ParallelGCThreads合理性设置
    作者:京东零售刘乐1.ParallelGCThreads参数含义在讲这个参数之前,先谈谈JVM垃圾回收(GC)算法的两个优化标的:吞吐量和停顿时长。JVM会使用特定的GC收集线程,当GC开始的时候,GC......
  • 计算机概览
    U1:ComputerandComputerScienceSA:ComputerOverview计算机概览Ⅰ.IntroductionAcomputerisanelectronicdevicethatcanreceiveasetofinstructions,......
  • 4. JVM
    JVM的内存区域,即运行时数据区域。线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区直接内存Java内存模型(JMM),Happens-Before规则。JVM内存结构和Ja......