一、java特点
跨平台,平台无关性,自动内存管理,面向对象,多线程,网络。
二、JDK,JRE
JDK,java开发人员工具包。JRE,java运行环境。现在已经整合了,一个jdk包含了JRE。java是通过JVM去实现的。jvm即java虚拟机,运行java程序的一个容器,提供不同操作系统的接口。
三、类加载机制
讲的是jvm如何把class文件加载到软件中去。
四、JVM模块
方法区,本地方法栈,堆空间,虚拟机栈,PC寄存器,程序计数器。
五、Java程序运行过程
-
源代码编写: 开发人员使用Java编程语言编写源代码文件,通常以
.java
为扩展名。 -
编译: 使用Java编译器(如
javac
)将源代码文件编译成字节码文件。字节码是一种中间语言,它是平台无关的,能够在任何支持Java的平台上运行。编译过程中,编译器会检查源代码的语法和语义错误,并生成对应的.class
字节码文件。 -
类加载: 当Java程序启动时,Java虚拟机(JVM)通过类加载器(ClassLoader)系统来加载字节码文件。类加载器负责查找和加载类文件,将其转化为内存中的Class对象。
类加载过程包括以下阶段:
- 加载:从文件系统或网络中读取.class文件数据。
- 验证:确保字节码符合Java语言规范和JVM规范,防止恶意代码执行。
- 准备:为类的静态变量分配内存并初始化为默认值。
- 解析:将符号引用转换为直接引用,如方法、字段和接口的引用。
-
类初始化: 如果类中有静态初始化块或静态变量需要初始化,JVM会在解析阶段后进行类初始化。
-
对象创建: 当需要创建对象时,JVM会为对象分配内存,并调用构造函数初始化对象的实例变量。
-
运行: JVM的执行引擎开始执行程序代码。它解释或编译(通过JIT编译器)字节码为特定平台的机器指令。
-
垃圾回收: 在程序运行过程中,JVM通过垃圾回收器自动管理内存。当一个对象不再被任何引用指向时,垃圾回收器会识别并回收其占用的内存。
-
异常处理: 如果在程序运行过程中发生异常,JVM会按照异常处理机制寻找适当的异常处理器来处理异常。
-
程序结束: 当程序执行完毕或者遇到系统退出命令(如
System.exit()
)时,JVM会进行清理工作,包括停止线程、关闭打开的文件等,然后退出。
六、java类中区域的执行顺序
1.静态成员变量
2.静态方法
3.构造函数,构造方法区
4.成员变量
5.内部类
6.main函数
7.成员方法
七、类加载器
在ClassLoader中被定义,具体的实现交给具体实现类,如BootstrapClassLoader类加载器(系统级类加载器rt.jar)------------->在这个之下,还有一个第二级类加载器(ExtClassLoader),是一个第三方扩展库类加载器。-----> 应用类加载器ApplicationClassLoader--------------------------------->CustomClassLoader自定义类加载器,由自己去实现。
八、类加载器的加载机制
双亲委派机制
我们写的java文件都是先通过应用级容器进行装载,它在拿到一个文件的时候,他不是马上加载,而是先去询问父级容器,即扩展类加载器,看他有没有加载这个文件,在这个父级之上,还有一个系统级的类加载器。这时,系统加载器也要去询问上一级Bootstrap类加载器。要通过父级和爷爷级的两个操作,确保他们俩都没有加载,这时候就交给类文件加载器加载。(一层一层向上去搜索,看这个文件有没有被加载你)
九、类加载器的生命周期步骤
加载
链接
验证,验证一些数据的合法性
准备,
解析,讲具体的符号转换为jvm能够识别的具体的符号引用