一 Java虚拟机
1 java虚拟机可以指规范,或者规范的实现,或者是运行的实例(一个java程序的运行就代表了一个jvm运行实例)
2 JVM生命周期
java命令 -> 类名 -> main()方法执行(非守护线程) -> 非守护线程全部执行完毕 -> 守护线程(如垃圾回收线程)自动退出 -> jvm运行终止
3 虚拟机的架构:
class文件 -> 类装载器子系统 -> 运行时数据区: 方法区 堆 java栈 PC寄存器 本地方法栈 -> 执行引擎 +-> 本地方法接口 -> 本地方法库
二 Java体系结构对平台无关性的支持
1 java程序对应的class文件只需要与java虚拟机打交道,当要与低层平台交互时,特定平台的jdk所带的java API封装了对本地方法的调用
2 java语言的基本数据类型的值域和行为都是由语言自己定义的,如int都是32位二进制补码表示的有符号整数;而c或c++,基本整数类型的值域是由编译器根据目标平台的字长来决定的
3 在编写平台独立的java程序时,必须遵从两条原则:
(1)不要信赖及时终结(finalization)来达到程序的正确性,
因为不同的虚拟机实现中可以使用不同的垃圾收集技术,意味着在不同的虚拟机中一个特定的java程序可能在不同的时间被垃圾收集,如果使用一个终结方法来释放有限的内存资源岢能在一些虚拟机上可以及时释放,而在其他实现上却直到资源耗尽也没有及时释放
(2)不要信赖线程的优先级来达到程序的正确性,
因为有些低层平台的线程调度机制可能不单单信赖于线程的优先级