jvm性能调优:jvm类的加载过程

多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main函数启动程序,这里首先需要通过类加载器把主类加载到JVM,主类在运行过程中如果使用到其它类,会逐步加载这些类。
  jvm性能调优

注意:对于我们自己写的jar包里的类不是一次性全部加载的,是使用到时才加载。
  类加载到使用整个过程有如下几步:
  加载>>验证>>准备>>解析>>初始化>>使用>>卸载:
  jvm性能调优

(1)加载:通过IO查找和读取硬盘上的字节码文件,将类字节码文件加载到内存中,并将这些数据转换为方法区域中的运行时数据(静态变量,静态代码块,常量池等),生成Class类堆中的对象表示此类(反射原理),作为方法区域类数据的访问条目。
  注意:使用到类时才会加载,例如调用类的main()方法,new对象等。
  (2)验证:验证被加载后的类是否有正确的结构,类数据是否会符合虚拟机的要求,确保不会危害虚拟机安全(验证字节码的正确性)。
  (3)准备:为类的静态变量(staticfiled)在方法区分配内存,并赋默认初值(0值或null值)。如staticinta=100;静态变量a就会在准备阶段被赋默认值0。
  对于一般的成员变量是在类实例化时候,随对象一起分配在堆内存中。
  另外,静态常量(staticfinalfiled)会在准备阶段赋程序设定的初值,如staticfinalinta=666;静态常量a就会在准备阶段被直接赋值为666,对于静态变量,这个操作是在初始化阶段进行的。
  (4)解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用(将类的二进制数据中的符号引用换为直接引用)。
  (5)初始化:类的初始化的主要工作是为静态变量赋程序设定的初值。
  如staticinta=100;在准备阶段,a被赋默认值0,在初始化阶段就会被赋值为100。
  说明:类的实例化是指在类完全加载到内存中后,创建对象的过程
  推荐阅读:使用32位操作系统进行JVM性能调优的方法介绍
  如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/111045814