本文源自Recently祝祝,创自Recently祝祝。转载请标注出处。
此解决方式在企业中有所应用,适合Java初级开发学习,参考。
本文字数与行数,耐心阅读必有收获。
Java程序员为什么要学习JVM虚拟机,为了升职加薪。其实Java程序员需要学习的不止java虚拟机一个,但是初级Java程序员想要升职加薪,JVM虚拟机的学习真的是必不可少。
1.Java类的一生
Java类的一生,第一步肯定就是编写java代码了,编写代码之前首先需要有Java开发环境,否则之后是编译不了。Java经过编译器编译之后编程.class二进制字节流文件,然后进入JVM中运行,JVM加载.class文件,并且进行代码验证也就是字节码的校验-环境准备-将.class文件解析成计算机JVM环境下能懂的语言本地字节码执行,最后进行垃圾回收(也就是一个FullGC的过程)
过程简易展示:
- Java环境,JDK安装---》
- 编译器安装--》
- 编写Java代码--》
- 编译Java代码,得到.class文件---》
- 加载.class文件--》
- 分配内存---》
- 字节码校验、环境准备、将字节码解释成本地字节码---》
- 垃圾回收不再使用的资源。
2.Java的一生中哪些部分使用到了JVM
那Java的一生中要经历那么多项的流程操作,哪一部分用到了JVM呢?
JVM的使用是在Java编译器将.java文件编译成.class文件之后就开始使用到了的,从.class文件被加载的那一刻开始,JVM就开始派上用场了,Java被编译器编译之后变成了.class文件,这个.class文件中就包含了虚拟机能理解的字节码指令。之后的Java运行中,.class文件就被JVM中的类加载器所加载,并且将他们转化为可执行代码。此时的JVM就会对.class文件进行字节码的校验、类的加载、环境的准备,直到最后垃圾回收了这个过程都是在JVM中完成的。
JVM在Java的一生中占了一大半。
3.JVM是什么
JVM可以说成是一套规范,其实JVM就是Java的运行环境,掌握着Java的一生,也就是说Java要是没有JVM就不能运行。所以安装java的时候你会发现他会连同JRE一起安装了,JRE就是Java的运行环境,这其中不仅包括了JVM还有一些Java中常用的库。
JVM是Java的核心组成部分,也是Java可以跨平台的原因之一。
JVM包含三个子系统:类加载器(用来加载.class文件,检查类的正确性和完成性)---》运行时数据区(Java类被加载之后JVM会为其分配内存,并且将数据转化为运行时数据结构,数据信息存放地)---》执行引擎(将文件转化问本地字节码文件之后执行,并且负责垃圾回收)
4.什么时候类会被加载
类被加载的时间点可以大致分为四个部分,细分的话也可以多分几个部分,这里就分成四个部分:
第一部分:当遇到代码中遇到new(构造新对象),getStatic(获取静态属性值),putStatic(为静态属性赋值)、invokeStatic(回调静态方法)
new:构造类对象
getStatic:获取静态属性值:MyClass.MY_CONSTANT;
public static final int MY_CONSTANT = 42;
public static void main(String[] args) {
int myValue = MyClass.MY_CONSTANT;
System.out.println("The value of myValue is: " + myValue);
}
putStatic:为静态属性赋值:MyClass.myValue = 42;
public static int myValue;
public static void main(String[] args) {
MyClass.myValue = 42;
System.out.println("The value of myValue is: " + MyClass.myValue);
}
invokeStatic:调用静态方法: MyClass.myStaticMethod();
public static void myStaticMethod() {
System.out.println("This is a static method.");
}
public static void main(String[] args) {
MyClass.myStaticMethod();
}
第二部分:反射调用类
Class c = Class.forname("com.hero.Student");
第三部分:初始化一个类时,发现其父类还没初始化,要先初始化其父类 :初始化的时候
类初始化由JVM负责,加载类之前会先检查它的父类和依赖的类是否被加载,未被加载就先加载,加载完之后依次初始化这些类的静态变量和静态代码块,之后才加载当前类。
第四部分:当虚拟机启动时,用户需要指定一个主类main,需要先将主类加载,启动类的时候
main方法是一个类的入口,遇到main之后会进行类加载,并且启动程序。
End>>>
腰杆要挺直