初步理解JVM(1)

  1. JVM的位置
操作系统
JRE -- JVM -C语言编写
Java程序1
Java程序2
硬件体系
  1. JVM的体系结构
    在这里插入图片描述
    在这里插入图片描述
  • Java栈、本地方法栈、程序计数器: 不会有垃圾回收
  • JVM调优大部分在方法区和堆==(基本都在调堆)==
  1. 类加载器
    .java --> Class File javac 文件名
    作用:记载Class文件(new Student();生成一个具体的实例,引用在栈里面,具体的属性在堆里面)
    在这里插入图片描述
Studet student1 = new Student();
Studet student2 = new Student();
Studet student3 = new Student();

在这里插入图片描述

  • 虚拟机自带的加载器
  • 启动类(根)加载器
  • 扩展类加载器
  • 应用程序加载器
    查看类加载器的方式
    对象.getClass().getClassLoader();
    System.out.println(student1.getClass().getClassLoader());
  1. 双亲委派机制:安全类
        当一个包名和类名一致时,触发双亲委派机制,优先加载根加载器,其次扩展加载器,最后应用加载器
    1.检查顺序: APP(应用加载器) —> EXT(扩展加载器) —>BOOT(根加载器 最终执行的)
    1. 如果BOOT里有,直接被加载。
    2. 如果BOOT里面没有,则去EXC里面找
    3. 如果BOOT、EXC里面没有,则去APP里面找
      类加载器收到类加载的请求,将这个请求向上委托给父类加载器去完成,一直向上委托、直到启动类加载器,(启动类加载器会检查是否能加载这个类,如果能加载就结束;如果不能加载当前加载器,否则,抛出异常,通知子类加载器进行加载。)重复括号内的内容

双亲委派机制的作用:

  • 确保Java核心类库的安全:所有的Java应用都至少会引用java.lang.Object类,也就是说在运行期,java.lang.Object类会被记载到Java虚拟机当中;如果这个加载过程是由Java应用自己的类加载器所完成的,那么可能会在JVM中存在多个版本的java.lang.Object类,而且这些类还是不兼容的、相互不可见的(因为命名空间的原因)。借助父亲委托机制,Java核心类库中的类的加载工作都是由启动类加载器来统一完成的,从而确保了Java应用所使用的都是同一个版本的Java核心类库,他们之间是互相兼容的。
  • 确保Java核心类库提供的类不会被自定义的类所替代。
  • 不同的类加载器可以为相同名称(binary name)的类创建额外的命名空间。相同名称的类可以并存在Java虚拟机中,只需要用不同的类加载器来加他们即可,不同类加载器所加载的类是不兼容的,这就相当于在Java虚拟机内部创建了一个又一个相互隔离的Java类空间。
    在这里插入图片描述

3,4的演示demo:

public class Student {
    public int age;
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        Student student3 = new Student();
        student1.age =1;
        student2.age =2;
        student3.age =3;

        Class<? extends Student> aClass = student1.getClass();  // 获取
        ClassLoader classLoader = aClass.getClassLoader();  // 获取类加载器  AppClassLoader
        System.out.println(student1.getClass().getClassLoader());
        System.out.println(classLoader);  // AppClassLoader 应用加载器
        System.out.println(classLoader.getParent()); //AppClassLoader的父类ExtClassLoader 扩展加载器  jre\lib\ext
        System.out.println(classLoader.getParent().getParent()); // 调用不到或者不存在  rt.jar
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊~小 l i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值