JVM散记

JVM执行引擎的实现:
        一、执行引擎一次性解释字节码。
        二、第一次被执行的字节码会被编译成本地的机器代码,编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。
这种执行引擎更快,但是也更消耗内存,叫做“即时编译器”。
        三、执行引擎是自适应优化器。虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并记录下使用最频繁的代码,
程序运行的时候,虚拟机只是把那些活动最频繁的代码编译成本地代码,其他的代码由于使用的并不很频繁,继续保留为字节码,一
一由虚拟机继续解释它们。
        四、有一种虚拟机是由硬件芯片构成,它用本地方法执行java字节码,这种执行引擎实际上是内嵌在芯片里面的。



JAVA程序通过调用本地方法和主机交互。java中有两种方法,一种是java方法,是由java语言编写,编译成字节码,存储在class文件中。
另一种是本地方法,是由其他语言(C, C++,或者汇编语言)编写,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式
是各个平台专用的。java方法是和平台无关的,但是本地方法不是的。


用户自定义的类装载器可以是用java编写的,它们实际上只是运行中的java应用程序可执行代码的一部分,它们能够被编译成.class文件,
能够被虚拟机装载,还能够像其他对象一样被实例化。被不同的类装载器装载的类存放在不同的命名空间中,它们之间不能相互访问,除非
应用程序显式地允许这么做。
某一个类被一个装载器装载,那么这个类所引用的类,也会被这个装载器装载。


WEB浏览器是一个动态扩展的例子,它可以使用用户自定义的类装载器,从网络下载java applet的的class文件,WEB浏览器启动的java应用程序
通常为每个提供class文件的网络地址创建不同的用户定义类装载器,因此可以把它们放在java主机应用程序的不同的命名空间中,防止恶意攻击。



JAVA的平台无关性:
        传统的语言写的程序通常首先会被编译,然后连接成为单独的、专门支持特定硬件平台和OS的二进制文件,这些二进制文件中包含目标处理器的
机器语言,而且这些二进制执行文件还依赖具体平台是整数的字节顺序(比如x86系列处理器二进制可执行文件中,字节顺序是低位在前,而对于PowerPC
处理器则是高位在前)。java编译器把java源文件的指令编译成字节码,这种字节码就是java虚拟机的“机器语言”,java class文件中字节顺序都是高位在前。
所以java所示是可以跨平台的。



Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。













你可能感兴趣的:(Java)