JVM学习之02_类装载器

一、JVM是什么?

回答技巧和要求:

我们学异常的时候,都学过RuntimeException吧,就是在jVM内存区域运行时内存区Runtime Data Area抛出来的。

方法区(Method Area):并不是放方法的地方,而是放类的描述的信息。方法区是放模板的地方。

java.lang.Class 

Class.forName("..");
/**
 *通过这个类的模板,按照模板生成一个实例
 *然后这个类的模板  XXX Class是存放在Method Area的
 */

通过这个类的模板,按照模板生成一个实例
 然后这个类的模板  XXX Class是存放在Method Area的

java Hello.java       ==>得到Hello.class

java Hello    ==>虚拟机不是靠检查Hello的后缀名是不是.class验证它是不是字节码文件的。真的class文件,在文件开头有特定的文件标识(cafe babe)

一装完Java,你为什么能用String这个类,为什么能用ArrayList这个类,是因为:rt.jar包被bootStrap加载器(启动类加载器)一启动的时候就加载进JVM里面了

二、类加载时机


·创建类的实例,也就是new一个对象
·访问某个类或接口的静态变量,或者对该静态变量赋值
·调用类的静态方法
·反射(Class.forName("com.lyj.load"))
·初始化一个类的子类(会首先初始化子类的父类)
·JVM启动时标明的启动类,即文件名和类名相同的那个类

三、类加载器类型

①C++写的根加载器

②Java写的扩展类加载器

③自己写的类的加载器

④自己写的加载器

 

VM预定义有三种类加载器,当一个 JVM启动的时候,Java开始使用如下三种类加载器:

1)根类加载器(bootstrap class loader):它用来加载 Java 的核心类,是用原生代码来实现的,并不继承自 java.lang.ClassLoader(负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类)。由于引导

自定义加载器?:就是我,不满意 你 Java类的加载顺序,要自己造,继承abstract的ClassLoader

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值