反射(Reflection)的作用:
| 首页 | 归档 | 分类 | 标签 | 关于 |
Java语言的类型可以分为两大类:基本类型(primitive types)和引用类型(reference types)。 基本类型是由Java虚拟机预先定义好的。
另一个大类引用类型,Java将其细分为四种:类、接口、数组类和泛型参数。由于泛型参数会在 编译过程中被擦除,因此Java虚拟机实际上只有前三种。
在类、接口和数组类中,数组类是由 Java虚拟机直接生成的,其他两种则有对应的字节流。
说到字节流,最常见的形式要属由Java编译器生成的class文件。除此之外,我们也可以在程序内 部直接生成,或者从网络中获取(例如网页中内嵌的小程序Java applet)字节流。
这些不同形式的字节流,都会被加载到Java虚拟机中,成为类或接口。为了叙述方便,下面我就用“类”来统称它们。
无论是直接生成的数组类,还是加载的类,Java虚拟机都需要对其进行链接和初始化。
加载,是指查找字节流,并且据此创建类的过程。对于数组类来说,它并没有对应的字节流,而 是由Java虚拟机直接生成的。对于其他的类来说,Java虚拟机则需要借助类加载器来完成查找字 节流的过程。
Java 内存模型 (Java Memory Model) 定义了 JVM 如何正确访问计算机主内存。JMM 指定了不同线程如何以及何时可以看到其他线程写入到共享变量的值,以及如何在必要时同步访问共享变量。
Java 多线程之间通信一般有两种方式: 共享内存和消息传递。Java 的并发采用共享内存的方式,共享内存通信方式对于程序员而言总是透明隐式进行的。
JMM 关键技术点都是围绕着多线程的原子性、可见性、有序来讨论的。JMM 解决了可见性和有序性的问题,而锁解决了原子性的问题。
Java 内存模型的可见性问题的底层实现是通过内存屏障 (memory barriers) 实现。
现代计算机内存模型: