jvm学习笔记
jvm学习笔记记录
本地方法是联系java程序和底层主机操作系统的连接方法。
如果自己实现本地方法,就要考虑到java的移植性问题了.大部分程序和软件之间都是socket通讯交互,所以在服务端的开发下,
几乎很少采用本地方法实现.多个类装载器的子系统。
当装载的类引用了另外一个类,虚拟机就会使用装载第一个类的类装载器装载被引用的类。
在允许两个类型之间对包内可见的成员进行访问之前,虚拟机不但要确定这两个类型属于同一个包,
还必须确认它们属于同一个运行时包—它们必须是由同一个类装载器装载的。由于软件和数据都是网络传输的,软件和数据的区别已经不那么明显了,软件和数据统称为neir。
当启动一个java程序时,一个虚拟机实列也就诞生了。
每个java程序运行于他们自己的java虚拟机实例中。在java虚拟机内部有两种线程:守护线程与非守护线程。
所有线程都共享方法区。
两个线程都企图反问一个类,而类还没载入到虚拟机,
这时只应该又一个线程去装载它,而另一个线程则只能等待。对于每一个被装载的类型,虚拟机都相应为它创建一个java.lang.Class类的实例,而且虚拟机还必须
以莫种方式把这个实例和存储在方法区中的类型数据关联起来。Class类使得运行程序可以访问方法区中保存的信息。
常量池中的符号引用替换为直接引用。
一个句柄池和对象池。
每个对象都有一个对象锁。
每当启动一个新线程时,java虚拟机都会为它分配一个java栈。
每当线程调用一个java方法时,虚拟机都会在该线程的java栈中压入一个新帧。而这个新帧自然就成了当前帧。
如果一个类型在它的首次主动使用之前还没有被装载和连接的话,那它必须在此时被装载和连接,这样才能被初始化。
每一个class文件有一个常量池。
在有双亲委派模式的情况下,启动类装载器可以抢在标准扩展类装载器之前去装载类,而标准扩展类装载器可以抢在类路径类装载器之前去装载那个类,类路径类装载器又可以抢在网络类装载器之前去装载它。
java虚拟机只把彼此访问的特殊权限授予由同意个类装载器载到同意个包中的类型。
java虚拟机:
抽象规范 一个具体的实现 一个运行中的虚拟机实例