Sun 公司核心技术丛书《深入Java虚拟机》——笔记
第一章 Java 体系结构介绍
-
Java程序可以正常运行的前提是需要:Java虚拟机、JavaAPI、Java class 文件 (三者配合才可以使用)
-
Java 是为网络设计的。这种适合网络环境的能力是由其体系结构决定的,它可以保证安全的、健壮的且和平台无关的程序通过网络传播,在很多不同的计算机和设备上运行。
-
软件开发者面对的挑战之一是对这种逐渐增长的以网络为核心的硬件环境,其包含的设备越来越广泛。一般网络都有很多不同的设备、不同的硬件体系、不同的操作系统。用于不同的用途。Java通过创建与平台无关的程序来解决这个问题。
-
网络为开发者带来的另外一个挑战就是安全性。除了潜在的好处。网络也为恶意的程序员开了渠道。他们可以获取和破坏信息。偷盗计算机资源。或者令人生厌的搞一些恶作剧。比如:病毒编写者可以把他们的程序放在网络上,让没有防护的用户下载。Java解决这个挑战的方法是,提供一个受保护的环境。从网络上下载的程序可以以不同的定制级别运行。
-
体系结构:Java程序设计语言、Java class 文件、Java 应用编程接口(API)、Java 虚拟机用Java程序编写源代码,然后把它编译成Java class文件,再由Java虚拟机运行class文件。
-
Java面向网络的核心就是Java虚拟机。它支持Java面向网络体系结构三大支柱的所有方面,平台无关性、安全性、网络移动性。
-
虽然每个Java虚拟机都必须能够执行class字节码,但是用何种技术来执行是可选的。而且他的规范也很灵活。它允许虚拟机用纯粹的软件来实现。也可以有大部分硬件来实现。
-
Java虚拟机的主要作用是装载class文件并执行其中的字节码。Java虚拟机中包含一个类装载器(class loader),他可以从程序和API中装载class文件,Java API只有程序执行时需要哪些类才会被装载,字节码由执行引擎来执行。不同的Java虚拟机中执行引擎可能实现的非常不同。
-
在软件执行的虚拟机中,最简单的执行引擎就是一次性解释字节码。
-
另一种的执行引擎更快,但是也更消耗内存。被称为(即时编译)just-in-time compiler。在这种情况下,第一次执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后别调用的时候可以重用。
-
而另一种是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行中的程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把哪些活动最频繁的代码编译成本地机器代码。其他的代码由于使用的并不是很频繁,继续保留为字节码一一由虚拟机继续解释它们。一自适应的优化器可以是的Java虚拟机在80% ~ 90%的时间里执行被优化过得本地代码,而只需要编译10% ~ 20%对性能有影响的代码。
-
最后一种虚拟机由硬件芯片构成,它用本地方法执行Java字节码,这种执行引擎实际上是内嵌在芯片里的。
-
有些时候Java虚拟机被称为Java解释器,因为执行字节码的方式可能不同,所以这样说并不正确。对于直接解释字节码的虚拟机来说是个合理的称呼。但是“解释”是一种我们所知道的易于实现而执行缓慢的特殊技术。因此“Java解释器”只表示“Java虚拟机”,但没有任何执行技术的含义。
-
当Java虚拟机是由主机操作系统上的软件实现的时候,Java程序通过调用本地方法(native method)和主机交互。
-
Java中有两种方法:Java方法和本地方法。
Java方法是由Java语言编写的,编译成字节码,存储在class文件中。
本地方法是由其他语言编写的,(比如C,C++,或者汇编语言编写,编译成和处理器线管的代码。本地方法保存在动态连接库中),格式是各个平台专有的。
-
Java方法是与平台无关的,本地方法是与平台有关的
-
Java API是与平台无关的,Java JNI是与平台有关的(Java可以写只支持某一个操作系统)
浙公网安备 33010602011771号