返回列表 发帖

[原创]深入Java虚拟机笔记(一)

[watermark]第一章 Java体系结构介绍
Java体系结构包括四个独立的技术:
1)Java程序设计语言
2)Java class文件格式
3)Java应用编程接口(API)
4)Java虚拟机
编写并运行一个Java程序时,就同时使用了这四种技术。用Java编程语言编写源代码,把它编译成Java Class文件,然后再在Java虚拟机中运行class文件。
Java面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱的所有方面:平台无关性、安全性和网络移动性。
Java虚拟机的主要任务是装载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器(class loader),它可以从程序中和API中装载class文件。Java API中只有程序执行时所需要的那些类才被装载。字节码由执行引擎来执行。
一个Java应用程序可以使用两种类装载器:“启动”类装载器和用户定义的类装载器。启动类装载器是Java虚拟机实现的一部分,通常使用某种默认方式从本地磁盘中装载类,包括Java API类。用户定义的类装载器能够使用自定义的方式来装载类。每一个类被装载的时候,Java虚拟机都监视这个类,看它到底是被启动类装载器还是被用户定义类装载器装载。
被装载的类默认情况下只能看到被同一个类装载器装载的别的类。Java体系结构允许在一个Java应用程序中建立多个命名空间,运行时的Java程序中的每一个类装载器都有它自己的命名空间。
Java class文件在平台无关性方面的任务:为Java程序提供独立于底层主机平台的二进制形式的服务。Java class文件中字节顺序的高位在前,这与使用何种平台产生这个文件和在何种平台上使用这个文件没有关系。
Java编译器把Java源文件的指令翻译成字节码

第二章 平台无关
Java应用程序中无论其运行平台是什么,int都是32位二进制补码表示的有符号整数,而float则总是遵守IEEE754浮点标准的32位浮点数。同样,这一点在Java虚拟机内部以及class文件中都是一致的。通过确保基本整数类型在所有平台上的一致性,Java语言不
本身为Java程序的平台无关性提供了强有力的支持。
   
在不需要平台无关性的情况下,直接调用本地方法是合适的。本地方法在三种情况下适用:
1)为了使用底层的主机平台的某个特性,而这个特性不能通过Java API访问
2)为了访问一个老的系统或者使用一个已有的库,而这个系统或库不是Java编写的
3)为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
Java程序中对虚拟机的依赖有两条原则:
1)不要依赖及时终结(finalization)来达到程序的正确性
在对象被释放以前由垃圾收集器运行的终结方法,在不同的虚拟机中可能是在不同的时间运行。
2)不要依赖线程的优先级来达到程序的正确性。
这个规范也保证了在较高优先级的线程被阻塞时,较低优先级的线程将会运行。但是,在较高优先级的线程没有被阻塞的情况下,并没有禁止较低优先级的线程的运行。因此,为了保证多线程的Java程序的平台独立,必须依赖同步(synchronization)而不是优先级来线程之间协调相互间的动作。
平台无关的七个步骤:
1)选择程序要运行的主机和设备的集合(“目标主机”)
2)在目标主机中选择自认为足够好的Java平台版本,在该版本Java平台上编写、运行程序。
3)对于目标宿主机,选择一些程序将要运行的Java平台实现。
4)编写程序,使它通过Java API的标准运行库来访问计算机(不要调用本地方法,或开发商专有的那些调用本地方法的库)。
5)编写程序,使它不依赖垃圾收集器及时终结的正确性,也不依赖线程的优先级。
6)努力设计一个用户界面,使它在你所有的目标宿主机上都能正常工作。
7)在所有的目标运行时环境和所有目标宿主机上测试程序。
[/watermark]

[原创]深入Java虚拟机笔记(一)

忙了一段时间,最近会比较勤的写笔记和文章。。。

TOP

[原创]深入Java虚拟机笔记(一)

支持原创,中国JAVA发展靠LZ了。

TOP

[原创]深入Java虚拟机笔记(一)

下面引用由starlight2006/09/15 00:14am 发表的内容:
支持原创,中国JAVA发展靠LZ了。
强奸易躲,意淫难防

TOP

返回列表 回复 发帖