JavaVirtualMachine
JavaVirtualMachine就是指Java虚拟器,以下简称VM.关于VM的概念,最早出自CPU模拟器,众所周知的PC上的游戏机模拟器采用的便是和JavaVM类似的技术.javasourcecode被编译成bytecode后,其实已经是很类似机器代码了,只不过没有真正能运行这类code的CPU而已,于是为了能达到在不同平台上运行的目的,VM的概念被大力推广.从简单的角度说,VM其实就是把javabytecode翻译成特定的机器代码,这和解释型编程语言不同,我们会在下面讲到.
第一代的VM大多采用直接解释的方法,也就是说一句一句地把bytecode翻译成机器代码.但这里有个缺点,如遇到循环,VM就不得不一次次重复翻译已经被翻译过的代码.而每一次翻译均需消耗一定的cpu时间.于是出现了第二代的VM-JIT(JustInTimeCompiler)它只在bytecode需要被翻译时才做翻译
工作.怎么实现呢?打个比方,JITVM可以事先把一段bytecode翻成machinecode,并把这段code放进buffer,当运行循环是,就反复调用这段翻译好的代码!JIT的效率取决于他分析重复调用的本领,把翻译的工作量限制到最小,以便让出CPU时间来运行
程序逻辑.
第三代的VM叫hotspot,我们以后做介绍.
有了VM以后等于有了一个虚拟的CPU,但我们还需要一定的外部设备来帮助完成计算任务,于是出现了JNI,它的作用在不同的场合有不同的含义.有时你可一用JNI直接写一个设备驱动程序,有时JNI可被作为lightweightwrapper来封装本地
系统的资源.再加上Java本身提供的标准库,VM提供了再多平台应用的环境!在一个系统中JVM往往不是唯一的,如果你在win32中安装了JDK,IE和Netscape,哪很有可能你已经有了三种不同的VirtualMachine.至于你的程序在那个VM上运行,完全取决于你系统的设置.大体上如果是运行applet,那么browser的VM会成为默认的平台.当然你可以用jdk的plug-in取代IE的MSJVM.
每台win32系统都包含了一个MSimplement的VM,如果安装了JavaSDK哪你就可以用jview来从commandline启动VMprocess.你可以在一台电脑上同时运行几个同种或不同种的VM,每一个都会运行在独立process中.
下面是一些系统的属性,你可以从中获得关于VM的一些讯息!
用System.getProperty(Strin
gpropertyName)
properyName:含义:
-----------------------------------------------------
java.version-JREversion
java.vendor-JREvendor
java.vendor.url-VendorURL
java.home-Installationdirectory
java.vm.specification.version-JVM标准的版本
java.vm.specification.vendor-JVM标准的开发商
java.vm.specification.name-
java.vm.version-JVMachineimplementationversion:
java.vm.vendor-JVMimplementationvendor
java.vm.name-JVMimplementationname
java.specification.version-JREspecificationversion
java.specification.vendor-JREspecificationvendor
java.specification.name-JREspecificationname:
java.class.version-Classformatversionnumber:
java.class.path-JavaCLASSPATH