《深入Java虚拟机(2)》摘录 ^^^^^^^^^^^^^^^^^^^^^^^^^ - 作者:臭豆腐[trydofor.com] - 日期:2010-04-24 - 授权:署名-非商业-保持一致 1.0 协议 - 声明:拷贝、分发、呈现和表演本作品,请保留以上全部信息。 0. 文档目录 ^^^^^^^^^^^ [[<=$INDEX]] 1. 第一章 Java体系结构介绍 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 【P2】四个独立但相关的技术:程序设计语言,class文件格式,API,虚拟机。 【P5】两种类装载器:bootstrap(JVM实现)和用户自定义(Java编写)。 【P6】运行时的每一个类装载器都有自己的名词空间。 【P7】class文件的字节序是高位在前(BIG-ENDIAN),同网络字节序。 2. 第二章 平台无关 ^^^^^^^^^^^^^^^^^^ 【P20】平台无关要:不依赖于虚拟机回收时机,不依赖于线程优先级。 3. 第三章 安全 ^^^^^^^^^^^^^^ 【P28】装载器载入类时,采用双亲委派(bootstrap无双亲),保护可信任类库边界。 【P31】java.lang.Virus是如何隔离的 ---- 运行时包。 【P32】class文件检验器,第一趟扫描,结构检查。CAFEBABE。 【P33】第二趟扫描,类型数据的语义检查。final被覆盖。 【P33】第三趟扫描,字节码验证。类的方法。 【P34】第四趟扫描,符合引用的验证。被引用类。 【P36】二进制兼容,修改必须不破坏已存在的类见调用关系。 【C3.6】安全管理器。 【C3.7】代码签名和认证。对散列签名。 【P51】策略文件。grant语句。 【C3.11】访问控制器。保护域。(一般不用,略) 4. 第四章 网络移动性 ^^^^^^^^^^^^^^^^^^^^ 【C4】略。 5. 第五章 Java虚拟机 ^^^^^^^^^^^^^^^^^^^^ 【C5.3】方法区和堆是共享的。程序计数器和栈是线程独享。 【C5.3.1】JVM数据类型:基本类型(其中boolean特殊,returnAddress类型 执行finally用),引用类型(类,接口,数组,null)。 【P91】用户ClassLoader及其实例在堆中,类信息,类(静态)变量在方法区。 【P97】常量池解析,把常量池中的符号引用替换为直接引用。 【P103】栈基本单位:帧,包括局部变量区,操作数栈和帧数据区(非编译时决定)。 【P104】byte,short,char,boolean在帧时做int处理,存回堆或方法区时变成原来类型。 6. 第六章 Java class文件 ^^^^^^^^^^^^^^^^^^^^^^^^ 【P121】一个class文件只能包含一个类或接口。 【C6】十分底层,略过。拓展学习cglib封装。 7. 第七章 类型的生命周期 ^^^^^^^^^^^^^^^^^^^^^^^^ 【C7.1】载入--连接(验证--准备--解析)--初始化。 【P162】JVM在首次主动使用类时,初始化他们。 【P162】主动使用:创建新实例;调用静态方法;使用类或接口的非常量静态字段; 调用特定的反射方法;初始化其子类;作为JVM启动时初始化的。 【P163】static final 常量表达式的,编译时生成常量的本地拷贝,非主动使用。 【P164】显式实例化途径:new;newInstance();clone();反序列化。 【P166】(args[0]+args[1]);隐式创建3个String和1个StringBuffer实例。 【P174】构造函数不允许捕捉被调用的this(),super()构造函数抛出的异常。 【C7.2.2】void finalize() 在GC释放内存前执行一次(慎用)。 8. 第八章 连接模型 ^^^^^^^^^^^^^^^^^^ 【P177】class文件把它所有的引用符号保持在常量池。 【P178】运行时连接类,Class.forName或自定义ClassLoader loadClass()。 【P180】forName自动初始化,如JDBC注册驱动;而loadClass需要initialize=true。 【P182】引用数组,由元素的ClassLoader定义,基本类型数组,有bootstrap定义。 【P184】加载类时先处理超类,止于Object。从Object返回的路上处理接口。 【BTW】CONSTANT:Class--Fieldref--Methodref--InteffaceMethodref--String--Integer... 【BTW】不hack高级应用,一般用不上,略。 9. 第九章 垃圾回收 ^^^^^^^^^^^^^^^^^^ 【P239】JVM规范中未要求特定的垃圾回收技术。 【P241】引用计数GC,跟踪GC,压缩GC,拷贝GC,按代GC,自适应GC。 【C9.9】火车算法。车厢,火车,火车站。 【P247】是GC运行了对象的finalize方法,无法预测,慎重使用。 【P248】强引用禁止GC,软,弱,影子引用不禁止。 【P251】软和弱引用调用get时,可得到对象的强引用或null,影子则只有null。 【BTW】深入学习 http://mindprod.com/jgloss/phantom.html。 10. 第十章 到 结尾 ^^^^^^^^^^^^^^^^^^ 【BTW】十分底层,即用即查。 11. 收尾总结 ^^^^^^^^^^^^ 本次阅读未能深入,因为实在是太深了。 本书如无特殊需求,特大毅力,是啃不下去的。 作为了解性内容,备查就好。