JVM基础
文章目录
视频地址:
尚硅谷
看到第45集
JVM探究
jvm所处位置
jvm体系结构
类加载器及双亲委派机制
虚拟机
JVM的位置
JVM整体结构
JVM的生命周期
SUN Classic VM
Exact VM
HotSpot VM
内存结构概述
类加载器和类的加载过程
类的加载过程
链接
注意:静态变量术语类的变量
初始化
类加载器的分类
注意:java的核心类库都是由引导类加载器来完成的
public class Test1 {
private int a=3;
public static void main(String[] args) {
//获取系统类加载器
ClassLoader systemCloader=ClassLoader.getSystemClassLoader();
System.out.println("系统类加载器:"+systemCloader); // sun.misc.Launcher$AppClassLoader@b4aac2
//获取扩展类加载器
ClassLoader extClassLoader=systemCloader.getParent();
System.out.println("扩展类加载器:"+extClassLoader); // sun.misc.Launcher$ExtClassLoader@140e19d
//尝试获取引导类加载器
System.out.println("启动类加载器:"+extClassLoader.getParent()); //null
//获取当前自定义类加载器
System.out.println("自定义类加载器"+Test1.class.getClassLoader()); // sun.misc.Launcher$AppClassLoader@b4aac2
//获取String类加载器 获取为null 说明String类由 引导类加载器 加载
System.out.println("String类加载器:"+String.class.getClassLoader()); // null
}
}
类加载器的使用
// 获取引导类加载器可以加载 哪些路径下的文件
URL[] urls= Launcher.getBootstrapClassPath().getURLs();
System.out.println("*****************************************");
System.out.println("获取引导类加载器可以加载 哪些路径下的文件");
for (URL url:urls){
System.out.println(url);
}
引导类加载器可以加载的文件路径:
扩展类加载器可以加载的文件路径
System.out.println("*****************************************");
System.out.println("获取扩展类加载器可以加载 哪些路径下的文件");
String extString=System.getProperty("java.ext.dirs");
for(String str:extString.split(",")){
System.out.println(str);
}
注意:引导类加载器无法直接获取,因为它是由C和C++ 编写的。
使用自定义类加载器的原因
ClassLoader的常用方法
双亲委派机制原理
双亲委派机制的优势
沙箱安全机制
类的主动使用和被动使用
运行时数据区概述及线程
JVM中的线程
PC寄存器
PC寄存器使用案例
进入编译后的class文件的目录,使用命令:
PC寄存器常见的面试题
PC寄存器为什么要被设置成线程私有
虚拟机栈
java虚拟机栈是什么
设置栈内存的大小