反射:类的加载机制
来源:互联网 发布:惠州乐知英语 编辑:程序博客网 时间:2024/06/05 15:13
1.JVM的启动和退出
当调用java命令来运行某个Java程序时,该命令将会启动一个JVM进程.同一个JVM中的所有线程,变量都处于同一个进程中,共享该JVM的内存区域.
当出现以下情况是,JVM会退出:
1):程序正常执行结束.
2):使用System.exit(0)方法;
3):出现异常时,没有捕获异常.
4):平台强制结束JVM进程.
JVM进程一旦结束,该进程中内存中的数据将会丢失.
当出现以下情况是,JVM会退出:
1):程序正常执行结束.
2):使用System.exit(0)方法;
3):出现异常时,没有捕获异常.
4):平台强制结束JVM进程.
JVM进程一旦结束,该进程中内存中的数据将会丢失.
2.类的加载.连接.初始化
当程序主动使用到某个类时,如果该类还未被加载进内存中,则系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作.
1):类的加载:
类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们称之为字节码对象.
类的加载过程由类加载器(ClassLoader)完成,类加载器通常有JVM提供,我们称之为系统类加载器,我们也可以继承ClassLoader类来提供自定义类加载器.
不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等.
类的加载时机
以下的情况,会加载这个类。
以下的情况,会加载这个类。
a. 创建类的实例 b. 类的静态变量,或者为静态变量赋值 c. 类的静态方法 d. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 e. 初始化某个类的子类 f. 直接使用java.exe命令来运行某个主类
类加载器
负责将.class文件加载到内在中,并为之生成对应的Class对象。
2):类的连接:
当类被加载进内存之后,系统为之生产一个对应的Class对象,接着把类的二进制数据合并到JRE中.
1>:验证:检测被加载的类是否有正确的内部结构.
2>:准备:负责为类的static变量分配内存,并设置默认值.
3>:解析:把类的二进制数据中的符号引用替换为直接引用(深入分析JVM).
3):类的初始化:
在此阶段,JVM负责对类进行初始化,主要就是对static变量进行初始化.
类的初始化一个类包含以下几个步骤:
1>:如果该类还未被加载和连接,则程序先加载并连接该类.
2>:如果该类的直接父类还未被初始化,则先初始化其父类.
3>:如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句.
负责将.class文件加载到内在中,并为之生成对应的Class对象。
a. Bootstrap ClassLoader 根类加载器 也被称为引导类加载器,负责Java核心类的加载 比如System,String等。在JDK中JRE的lib目录下rt.jar文件中b. Extension ClassLoader 扩展类加载器 负责JRE的扩展目录中jar包的加载。 在JDK中JRE的lib目录下ext目录c. System ClassLoader 系统类加载器 负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径。 我们用的是System ClassLoader 系统类加载器
2):类的连接:
当类被加载进内存之后,系统为之生产一个对应的Class对象,接着把类的二进制数据合并到JRE中.
1>:验证:检测被加载的类是否有正确的内部结构.
2>:准备:负责为类的static变量分配内存,并设置默认值.
3>:解析:把类的二进制数据中的符号引用替换为直接引用(深入分析JVM).
3):类的初始化:
在此阶段,JVM负责对类进行初始化,主要就是对static变量进行初始化.
类的初始化一个类包含以下几个步骤:
1>:如果该类还未被加载和连接,则程序先加载并连接该类.
2>:如果该类的直接父类还未被初始化,则先初始化其父类.
3>:如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句.
阅读全文
0 0
- 反射:类的加载机制
- 类的加载机制和反射总结
- 类的加载机制和反射
- “反射机制”与“类加载机制” 的 举例
- 类加载机制与反射
- 类加载机制与反射
- 类加载机制与反射
- 类加载机制与反射
- 类加载机制和反射
- 类加载机制及反射
- 类加载机制及反射
- 类加载机制与反射
- 类加载机制和反射
- 类加载机制及反射
- Java类加载机制和反射机制
- JAVA程序的类加载及其反射机制
- java 加载类和反射机制的总结
- 初学Java的类加载与反射机制(一)
- 会计科目的共同类指的是什么
- android getevent用法
- java定时器时间配置
- angular2实战笔记--组件开发
- vs"链接器工具错误 LNK2026 XXX模块对于SAFESEH 映像是不安全的"
- 反射:类的加载机制
- Python爬取百度贴吧帖子
- [LeetCode] Remove Boxes
- 我与Oracle数据库不得不说的那些事-错误总结篇
- Win7 Python2.7 安装教程
- 5月英语总结
- React学习笔记----如何在html页面中使用react
- 06-3-系统命令初步
- spring cloud注册服务