Java的体系结构:Java程序设计语言,Java class文件格式,Java应用编程接口,Java虚拟机。
Java虚拟机的主要任务是装载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器(class loader),它可以从程序和API中装载class文件。Java API中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。
字节码执行有3中方式,一次性解释字节码,即时编译器(just-in-time compiler),这种情况下,第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用,第三种是自适应优化器,这种方法里,虚拟机开始的时候解释字节码,但是会监视运行中冲虚的活动,并且记录下使用最频繁的代码段。
Java有两种方法:Java方法和本地方法。Java方法是由Java语言编写,编译成字节码,存储在class文件中的。本地方法是由其他语言编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专有的。
当被装载的类应用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。由于这种加载方式,被装载的类在默认情况下只能看到被同一个类装载器装载的别的类。Java的体系结构允许在一个Java应用程序中建立多个命名空间。运行时的Java程序的每一个类装载器都有它自己的命名空间。从不同源文件装载的类可以分割在不同的命名空间中,这样就能够使用Java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问和破坏善意代码的权限。
Java比C++的优点:Java的垃圾回收机制不需要或者不能直接操作内存,使得Java不必在程序复杂之时考虑哪些对象内存需要释放,数组边界检查和空值对象引用检查,提升了效率。