一:反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二:类的加载
第一步.加载:值得是Class.forName("全限定名"),加载字节码文件
第二步:链接又分为验证,准备,解析
验证:指的是检验字节码的合法性
准备:指给静态变量分配内存空间,并且赋初始默认值
解析:指的是将符号引用转换为直接引用
第三步:初始化:指静态变量赋值和执行类中的初始化(static)语句
初始化的时机有6种情况:
第一:创建类的实例(有4种方式)
第二:访问静态变量或者给静态变量赋值
第三:调用类静态方法
第四:调用Class.forName("包类名")如加载数据库驱动
第五:完成子类的初始化也会完成本类初始化
第六:该类是程序的引导入口,比如main入口或test入口
三,jvm的五大区域
1、程序计数器:程序计数器是一块很小的内存空间,它是线程私有的,可以认作为当前线程的行号指示器就说线程执行的位置记录。
2、栈(虚拟机栈):线程的独占空间,线程每次调用方法执行都会放入这里面,平时说的栈一般指局部变量表部分。
3、本地方法区:本地方法栈则为虚拟机使用到的native方法服务,可能底层调用的c或者c++,我们打开jdk安装目录可以看到也有很多用c编写的文件,可能就是native方法所调用的c代码
4、方法区:方法区用于存储已被虚拟机加载的类信息、常量、静态变量,如static修饰的变量加载类的时候就被加载到方法区中
5、堆:存放new出来的对象信息, 全局变量
网友评论