1.JVM的体系结构、类加载机制、双亲委派机制

1.JVM的体系结构图
在这里插入图片描述
2.类实例化过程
在这里插入图片描述
如上图,student类进行javac编译成class文件,然后当这个类被实例化的时候,会向类加载器发出初始化请求,初始化请求之后,会生成一个该类的模板,也就是getClass()方法,之后进行实例化生成对应的对象地址,放在栈中,真正的数据放入堆中。ps可以看出getClass()获得的hashCode一定相同,当时栈中存放的地址不相同。
3.类加载器的种类

  1. 启动类加载器(BootStrapClassLoader):这个类加载器负责放在java_home/jre/lib目录中,或者-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。用户无法直接使用。注意点:BootstrapClassLoader不是一个类,将BootStrapClassLoader打印会发现为空,因此我们也可以通过某一个类的加载器是否为null来作为判断该类是不是使用BootstrapClassLoader进行加载的依据
  2. 扩展类加载器:这个类加载器继承java.lang.ClassLoader,加载<JAVA_HOME>/jre/lib/ext目录下的类,或者被java.ext.dirs系统变量指定的路径中的所有类库。它的父加载器是null(因为BootstrapClassLoader是使用C++实现的,没有对应的java类)。
  3. 应用程序加载器(系统类加载器):是由 Sun 的AppClassLoader (sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,因此一般称为系统(System)加载器。
    在这里插入图片描述
    ps:如上图可见启动类加载器(根类加载器)为null,他的实现是通过native start0 进行调用本地方法接口来进行运行的,所以不是一个类,java无法运行,为null
    4.双亲委派机制
    关系图:这个就懒得画了,从别的地方摘抄过来
    在这里插入图片描述
    类加载器的执行流程:
    第一:类加载器接受到类加载请求
    第二:类加载器重应用程序类加载器到扩展程序类加载器最后到启动类加载器一步一步向上寻找对应的类加载器,然后使用最高层的类加载器进行类的加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值