jvm相关
jvm相关
# 1.jdk、jre、jvm的关系
# 1、jdk
JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。
# 2、jre
JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。
# 3、jvm
JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
JDk包含JRE,JDK 和 JRE 中都包含 JVM。
# 2.Java执行流程
# 1.java代码
# 2.前端编译器
# 3.Java字节码
# 4.类加载器
# 5.解释、编译、执行
# 3.jvm的架构模型
# 1.基于栈的架构模型
特点不依赖硬件,可移植性好,可以跨平台
# 2.基于寄存器的架构模型
特点依赖硬件,性能更高
# 4.几种虚拟机
# 1.sun classic
# 2.exact jvm
# 3.hotspot 主流
# 4.JRockit
# 5.IBM J9
# 5.Java类加载的七个阶段
加载、验证、准备、解析、初始化、使用、卸载
# 6.代码块的执行顺序
(25条消息) 【 java 面向对象】代码块以及不同位置对属性赋值的执行顺序_馆主阿牛的博客-CSDN博客 (opens new window)
第一步:先执行父类的静态代码块
第二步:再执行子类的静态代码块
第三步:再执行父类的代码块
第四步:再执行父类的构造方法
第五步:再执行子类的代码块
第六步:再执行子类的构造方法
# 7.帮助理解的一个类
如果一个属性是静态的,它会按照代码的顺序执行,如果 int A在静态代码块之前,输出的Son.B就是2,如果在静态代码块之后,Son.B就是1.
public class Test {
static class Father{
#public static int A =1;
static {
A =2;
}
public static int A =1;
}
static class Son extends Father{
public static int B =A;
}
public static void main(String[] args) {
System.out.println(Son.B);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 8.类加载器的分类
# 1.引导类加载器(图片中的启动类加载器,用C语言写)
# 2.自定义类加载器(图片中除了启动类加载器,其他的都是自定义加载器,跟图片中的自定义加载器定义范围不一样,用java语言写)
其中扩展类加载器和系统类加载器都继承了Classloader,引导类加载器和自定义类加载体是包含关系,非继承关系
# 9.双亲委派机制
双亲委派机制存在的意义: 1.通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。 2.通过双亲委派的方式,还保证了安全性。因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。那么,就可以避免有人自定义一个有破坏功能的java.lang.Integer被加载。这样可以有效的防止核心Java API被篡改。
# 10.在jvm中判断两个class对象是否完全一致。
1.包名完全一致
2.加载这个类的classloader(指的是classloader的实例对象)必须相同
# 11.jvm的后台线程
1.虚拟机线程
2.周期任务线程
3.GC线程
4.编译线程
5.信号调度线程
# 12.pc寄存器
pc寄存器存储下一条指令的地址,由执行引擎获取地址,调用并执行。
它是唯一一个在内存中没有javaOutofMemoryError的区域
有垃圾回收的区域堆和方法区(元空间)
有可能出现内存溢出错误的区域,方法区、堆、栈
- 01
- python使用生成器读取大文件-500g09-24
- 02
- Windows环境下 Docker Desktop 安装 Nginx04-10
- 03
- 使用nginx部署多个前端项目(三种方式)04-10