博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚拟机加载类的几种方式
阅读量:3951 次
发布时间:2019-05-24

本文共 933 字,大约阅读时间需要 3 分钟。

什么是类加载

当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。

而类加载必然涉及类加载器

java语法的角度来看

  1. 使用new 静态加载
  2. 调用某个 ClassLoader 实例的 loadClass() 方法
  3. 调用 Class.forName() 方法

jvm加载类的机制

双亲委派机制

线程上下文加载机制

1 和 3 用 new 和 Class.forName 的方法都是使用 的 this.getClass.getClassLoader

@CallerSensitive    public static Class
forName(String className) throws ClassNotFoundException {
Class
caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); }

使用 classLoader 则是用户指定类加载器

两个异常(exception)

静态加载的时候如果在运行环境中找不到要初始化的类,抛出的是NoClassDefFoundError,它在JAVA的异常体系中是一个Error
动态态加载的时候如果在运行环境中找不到要初始化的类,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个checked异常

类的加载(类初始化):

1、在java代码中,类型加载连接、与初始化过程都是在程序运行期间完成的(类从磁盘加载到内存中经历的三个阶段)【牢牢记在心里】

2、提供了更大的灵活性,增加了更多的可能性

总结: 加载阶段简单来说就是: .class文件(二进制数据)——>读取到内存——>数据放进方法区——>堆中创建对应Class对象——>并提供访问方法区的接口

转载地址:http://efyzi.baihongyu.com/

你可能感兴趣的文章
嵌入式系统 Boot Loader 技术内幕
查看>>
浅析linux开发工具adb具体实现
查看>>
Adb源码学习
查看>>
浅析linux开发工具adb具体实现
查看>>
清炒土豆丝的做法详细介绍
查看>>
adb 协议
查看>>
Android Debug Bridge 服务详解
查看>>
linux access函数判断文件存取权限
查看>>
epoll使用
查看>>
C语言的常用类型转换函数(atoi,atol,strtod,strtol,strtoul)
查看>>
C语言宏定义##连接符和#符的使用
查看>>
对FrameBuffer的一夜hack
查看>>
Linux framebuffer ---double buffer
查看>>
android电源管理
查看>>
Android电源管理相关应用技巧分享
查看>>
Linux关机重启流程分析
查看>>
MOS管及MOS管的驱动电路设计
查看>>
ARM中的程序状态寄存器(CPSR)
查看>>
关于c语言的sizeof
查看>>
2440init.s文件分析
查看>>