文档章节

类加载机制

ssnoodles
 ssnoodles
发布于 2017/06/02 23:52
字数 232
阅读 27
收藏 2

类加载

ClassLoader 干的事,就是把class文件加载到JVM中去。

Java默认提供3个类加载器

  • BootstrapClassLoader
  • ExtClassLoader
  • AppClassLoader
public class ClassLoaderTest {

    public static void main(String[] args) {
        System.out.println(ClassLoaderTest.class.getClassLoader());
        System.out.println(ClassLoaderTest.class.getClassLoader().getParent());
        System.out.println(ClassLoaderTest.class.getClassLoader().getParent().getParent());
    }
}

打印出:

sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@2f92e0f4
null

null 是因为BootstrapClassLoader 不是java写的而是c++写的。

先从顶层开始加载,如果加载不到就交由下一级加载,都加载不到就抛ClassNotFoundException异常。

具体过程

  • 加载
    • 根据类的全名获取二进制流
    • 将二进制流转化为JVM方法区的数据结构
    • 在内存中实例化Class对象,放入方法区对外提供接口
  • 验证
    • 二进制包含的信息符合JVM的要求
  • 准备
    • 静态变量分配到内存并初始化默认值
    • 常量池内的符号引用替换成直接引用
  • 初始化
    • 静态变量赋值
    • 执行静态代码块

© 著作权归作者所有

共有 人打赏支持
ssnoodles
粉丝 1
博文 31
码字总数 9574
作品 0
张家港
私信 提问

暂无文章

Vue重要知识小结

vue sync修饰 (1)双向数据绑定,父子组件之间信息的交互 1⃣️在自组件中使用this.emmit('toFather'),子组件产生一个tofather事件,然后在父组件中通过@进行监听,那么可以实现通信过程 2⃣...

peakedness丶
40分钟前
1
0
1024我们的码农节-向自己致敬!

一、blog主有话要说 作为(真正)入赘程序届的第一年, 对明天的1024码农节有很多话想说.比如: 给各位辛苦大佬们讲几个咱们程序届段子 给自己立一个flag, 明年的1024争取少掉点甚至不掉头发! ...

Ala6
42分钟前
12
0
solr使用规范

0. 目的 规范solr设计、用法,避免bug,提高性能 1. 设计规范 solr的用途是查询,不是存储,建议查询结果尽量都为id主键,而后再拿该id主键到缓存或者db中再查询相关信息,例如:请勿将经销商...

andersChow
54分钟前
1
0
11-《深度拆解JVM》之Java对象的内存布局

一、问题引入 在 Java 程序中,我们拥有多种新建对象的方式。除了最为常见的 new 语句之外,我们还可以通过反射机制、Object.clone 方法、反序列化以及 Unsafe.allocateInstance 方法来新建对...

飞鱼说编程
59分钟前
1
0
Windows Install Docker

win7、win8 win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker toolbox...

linuxprobe16
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部