锁定老帖子 主题:java虚拟机
精华帖 (0) :: 良好帖 (21) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-14
最后修改:2009-02-14
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子句。
引用类型被统称为“引用”,有三种引用类型:类类型,接口类型,以及数组类型,它们的值都是对动态创建对象的引用。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-15
很牛的一本书,很喜欢。自从看了它我的忽悠能力大大提高
|
|
返回顶楼 | |
发表时间:2009-02-16
额,这个东西有用的好吧,忽悠只是其中一种
|
|
返回顶楼 | |
发表时间:2009-02-16
这本书读完1~5章,第7章浏览过一些,没敢再读下去。说实话我觉得曹翻译的有点生硬 ,但也可能是因为我不理解一些太专业的术语吧,有时候我得上google查半天。我还是把深入理解计算机系统看完再回头读这本书吧。
|
|
返回顶楼 | |
发表时间:2009-02-16
我也只是读了1到8章,后面从第10章开始就是对执行引擎的指令集的说明手册,倒是觉得没什么必要看了
|
|
返回顶楼 | |
浏览 4046 次