摘要:
8.1.4 解析CONSTANT_Class_info入 口 在所有常量池入口类型中,解析起来最复杂的就是CONSTANT_Class_info了。这种人口 类型用来表示指向类(包括数组类)和接口的符号引用。有几个指令,比如new和anewarray, 直接使用CONSTANT_Class_info 阅读全文
摘要:
8.1.5 解析CONSTANT_Fieldref_info入口要解析类型是CONSTANT_Fieldref_info的常量池入口,虚拟机必须首先解析class_index项 中指明的CONSTANT_Class_info入口。因此,解析CONSTANT_Fieldref_info时可能抛出任何因 阅读全文
摘要:
8.1.2类装载器与双亲委派横型 在第3章曾讲过,1.2版本中引人了类装载器的形式化双亲委派模型。虽然老式版本(即12 版本之前)编写的类装载器无法享受双亲委派模型的好处,但仍然可以在1.2版本中使用,1.2版 本及更高版本中推荐使用双亲委派模型创建类装载器。1.2版本中每一个用户自定义的类装载器在 阅读全文
摘要:
8.1.3常量池解析 本节描述解析每一种常量池入口类型的细节,包括可能在解析过程中抛出的错误。如果在 解析过程中抛出了错误,错误被看成是由指向执行解析的常量池入口的引用者抛出的。除了这里描述的错误,触发常量池入口解析的不同的指令,可能导致抛出其他的错误。比如,getstatic 导致CONSTANT 阅读全文
摘要:
8.1.1解析和动态扩展 除了简单地在运行时连接类型之外,Java程序还可以在运行时决定连接哪一个类型。Java的 体系结构允许动态扩展Java程序,这个过程包括运行时决定所使用的类型,装载它们,使用它们。 通过传递类型的名字到java.lang.Class的forName ()方法,或者用户自定义 阅读全文
摘要:
从程序员的角度来看,理解Java体系结构最重要的方面之一就是连接模型。前几章曾讲过, Java的连接模型允许用户自行设计类装载器,这样以来就可以在运行时定制地扩展用户的程序。 通过用户自定义的类装载器,你的程序可以装载在编译时并不知道或许尚未存在的类或者接口, 并动态连接它们。 驱动Java连接模型 阅读全文
摘要:
7.3卸载类型 在很多方面,虚拟机中类的生命周期和对象的生命周期很相似。虚拟机创建并初始化对象,使程序能使用对象,然后在对象变得不再被引用后可选地执行垃圾收集。同样,虚拟机装 载、连接并初始化类,使程序能使用类,当程序不在引用它们的时候可选地卸载它们。 类的垃圾收集和卸载之所以在Java虚拟机中很重 阅读全文
摘要:
7.2对象的生命周期一旦一个类被装载、连接和初始化,它就随时可以使用了。程序可以访问它的静态字段, 调用它的静态方法,或者创建它的实例。本节会讨论类的实例化和初始化,即对象生命起始阶 段的活动;还要讨论垃圾收集和终结,即对象生命尽头的活动。 7.2.1类实例化 在Java程序中,类可以被明确或者隐含 阅读全文
摘要:
7.2.2垃圾收集和对象的终结 前面的章节中曾讲过,Java虚拟机实现必须具有某种自动堆存储管理策略一大部分是采用 垃圾收集器,本章前面也讲过,程序可以明确或者隐含地为对象分配内存,但是不能明确地释 放内存。但一个对象不再为程序所引用了,虚拟机必须回收(垃圾收集)那部分内存。实现可 以决定何时应垃圾 阅读全文
摘要:
当类型被装载后,就准备进行连接了。连接过程的第一步是验证——确认类型符合Java语言 的语义,并且它不会危及虚拟机的完整性。 在验证上,不同的虚拟机实现拥有一些灵活性。虚拟机实现的设计者可以决定如何以及何 时验证类型。Java虚拟机规范列出了虚拟机可以拋出的异常以及在何种条件下必须抛出它们。不 管J 阅读全文