文档章节

类加载机制

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
张家港
私信 提问

暂无文章

linux中shell if 判断总结

UNIX Shell 里面比较字符写法 -eq 等于; -ne 不等于; -gt 大于; -lt 小于 ; -le 小于等于; -ge 大于等于; -z 空串; -n 非空串; = 两个字符相等; != 两个字符不等 无论什么编程语言都离不开条...

linuxprobe16
26分钟前
0
0
我是如何将博客转成PDF的

前言 只有光头才能变强 之前有读者问过我:“3y你的博客有没有电子版的呀?我想要份电子版的”。我说:“没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀”...

Java3y
28分钟前
1
0
nginx的一些总结

Linux下安装Nginx完整教程及常见错误解决方案 1.Nginx安装环境 Nginx是C语言开发,建议在linux上运行,本教程使用Centos7.0作为安装环境. 1)gcc 安装nginx需要先将官网下载的源码进行编译,编译...

Yao--靠自己
35分钟前
1
0
Predicate函数式接口

Predicate接口主要用于流的筛选,比如在filter方法中传入Predicate判断。 作为函数式接口,这里居然有三个default方法,一个static方法,子孙满堂! 正统的接口方法,就是boolean test(T t)...

woshixin
36分钟前
1
0
sql 开窗函数

开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数...

hblt-j
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部