Java 之虚拟机
来源:互联网 发布:绣花软件免费下载 编辑:程序博客网 时间:2024/06/07 01:25
1.程序中对子类的“主动使用”会导致父类的初始化,但对父类的“主动使用”并不会导致子类的初始化。
2.类的加载,连接与初始化:
加载:查找并加载类的二进制数据(字节码文件);
连接:
------验证:确保被加载类的正确性;
------准备:为类的静态变量分配内存,并将其初始化为默认值;
------解析:把类中的符号引用转换为直接引用;
初始化:为类的静态变量赋予正确的初始值(静态变量,静态代码块);
3.类的加载:
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区的数据结构。
4.类的加载:主动使用(六种)
——创建类的实例;
——访问某个类或接口的静态变量,或者对该静态变量赋值;
——调用类的静态方法;
——反射(如Class.forName("java.lang.String"));
——初始化一个类的子类(对父类的主动使用);
——Java虚拟机启动时被标明为启动类的类(含有main方法);
1.类加载器的父亲委托机制(Parent Delegation):
类加载器用来将类加载到Java虚拟机中。从JDK1.2版本开始,类的加载过程采用父亲委托机制,这种机制能更好的保证Java平台的安全性。在这种委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父类加载器。当Java程序请求加载器Loader1加载类Sample时,loader1首先委托自己的父加载器去加载Sample类,若父加载器能加载,则有父加载器完成任务,否则才有加载器Loader1本身去加载Sample类。
2.Java虚拟机自带了以下几种加载器:
根类加载器(Bootstrap)类加载器:该加载器没有父类加载器,它负责加载虚拟机的核心类库,根类加载器的实现依赖底层操作系统,属于虚拟机实现的一部分,它并没有继承java.lang.ClassLoader类。
扩展类(Extension)加载器:它的父加载器是根类加载器,扩展类加载器是纯Java类,是java.lang.ClassLoader类的子类。
系统类(System)加载器:也称为应用类加载器,它的父加载器是根类加载器,它是用户自定义的类加载器的默认父类加载器,系统类加载器是纯Java类,是java.lang.ClassLoader类的子类。
父子加载器并非继承关系,也就是说子加载器并不一定是继承了父加载器。
3.Java类加载器之间的关系:
请求加载从下到上,加载顺序从上到下。
4.定义类加载器:如果某个类加载器能成功的加载一个类,那么该类加载器就称为定义类加载器;定义类加载器及其子加载器都称为初始类加载器。
5.命名空间:每个类加载器都有自己的命名空间,命名空间由该加载器及所有父加载器加载的类组成。同一个命名空间中的类是相互可见的,不同的命名空间中的类是相互不可见的,即不能相互访问(通过反射机制可以实现访问)。
6.运行时包:由同一类加载器加载的属于相同包的类组成。
- java 虚拟机之classLoader
- Java虚拟机之体系结构
- Java 之虚拟机
- Java虚拟机之ClassLoader
- 体系结构之Java 虚拟机
- java虚拟机之JVM
- java虚拟机之HotSpot
- java之虚拟机详解
- java虚拟机之概述
- Java虚拟机之GC
- java虚拟机之gc
- Java基础之java虚拟机
- 深入理解JAVA虚拟机之虚拟机参数
- java虚拟机之二虚拟机内存结构
- java虚拟机之垃圾回收
- Java虚拟机之垃圾回收
- Java虚拟机之Class文件
- Java虚拟机之线程同步
- pyOpenGL实例讲解
- java中集合 list Map arraylist linkedlist hashmap
- ACM搜索算法总结
- 有关倒水问题之总结--欧几里德算法
- 使用 Bullet,BulletManager 在 XNA 中创建子弹攻击目标(十五)
- Java 之虚拟机
- 关闭对话框,OnClose和OnCancel
- 黑马程序员-反射机制
- IOS沙盒(sandbox)机制和文件操作(一)
- 个人重构机房收费系统之报表
- android 开发积累
- Websites Android developers must bookmark
- C++ UTF8编码转换 CChineseCode
- IOS沙盒(sandbox)机制和文件操作(二)