java虚拟机

PS:貌似现在学这种东西的人没多少了,都在研究SSH,《深入Java虚拟机》是一本好书,但是文字实在太多,所以提取了精简的部分

 

 

Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数据类型以及指令几个术语来描述的。

 



 

 

1.       子系统(类装载在子系统)

 

Java虚拟机中,负责查找并装载类型的那部分被成为类装载子系统Java虚拟机由两种类装载器:启动类装载器和用户自定义装载器。对于每个被装载的类型,Java虚拟机都会为它创建一个java.lang.Class类的实例来代表该类型。

 

 

类装载子系统除了要定位和导入二进制class文件以外,还必须负责验证被导入的正确性、为变量分配并初始化内存,以及帮助解析符号引用。这些动作必须严格按照一下顺序执行:

 

1)  装载   --------查找并装载类型的二进制数据

2)  连接   --------执行验证,准备、以及解析

3)  初始化 --------把变量初始化为正确初始值

 

详细请看:类()的生命周期--装载、连接、初始化、卸载

 

 

2.       内存区(运行时数据区)

 

Java虚拟机运行时,它需要内存来存取很多东西。例如,字节码,从已经装载的class文件中得到的其他信息,程序创建的对象,传递给方法的参数,返回值,局部变量,已经运算的中间结果等。Java虚拟机把这些数据都组织到几个“运行时数据区”,以便于管理

 

       某些运行时数据区是由程序中所有线程共享的,还有一些则是只能有一个线程拥有。每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,它把这些是类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中

 

       当每一个新线程创建时,它都将得到它自己的PC寄存器(程序计数器)以及一个Java栈。如果线程正在执行的是一个Java方法,那么PC寄存器的值将总是只是下一条将被执行的指令,而它的Java栈则总是存储该线程中Java方法的调用状态----包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中间结果等。

 

详细请看:运行时数据区

 

 

3.       数据类型

 

数据类型可以分为两种:基本类型和引用类型。基本类型的变量持有原始值,引用类型的变量持有引用值。

 

    Java虚拟机中还有一个只在内部使用的基本类型:returnAddress,这个基本类型被用来实现Java程序中的finally子句。

 

引用类型被统称为“引用”,有三种引用类型:类类型,接口类型,以及数组类型,它们的值都是对动态创建对象的引用。

 

 


 

你可能感兴趣的:(java,虚拟机,浏览器,Google,ssh)