深刻了解底层的技术处理细节必不可少。 Java曾经成为一个庞大而复杂的技术平台, 对于开发人员而言, 要想更好的掌握Java技术, 有助于提高咱们对整个Java平台的了解力。 这里所介绍的是Java技术平台的几个核心概念, Java虚拟机的次要任务是装在class文件而且执行其中的字节码。 Java虚拟机包含一个类装载器, 它能够从顺序和API中装载class文件。 字节码由执行引擎来执行。 不一样的Java虚拟机中, 另外一种执行引擎更快, 叫作即时编译器(just-in-timecompiler)。 第一次被执行的字节码会被编译成本地机器代码。 编译出的本地机器代码会被缓存, 当办法之后被调用的时候能够重用。 第三种执行引擎是自顺应优化器。 在这种办法里, 虚拟机开始的时候解释字节码, 而且记载下运用最频繁的代码段。 顺序运行的时候, 其余的代码因为运用得不是很频繁, 而只须要编译10%~20%的对性能有影响的代码。 Java顺序通过调用本地办法(nativemethod)和主机交互。 Java中有两种办法:Java办法和本地办法。 Java办法是由Java言语编写, 存储在class文件中的。 c++或汇编言语)编写的, 本地办法保管在动态连接库中, 格式是各个平台专有的。 运行中Java顺序调用本地办法时, 虚拟机装载包含这个本地办法的动态库, 并调用这个办法。 本地办法是联络Java顺序和底层主机操做系统的链接办法。 通过本地办法, Java顺序能够直接访问底层操做系统的资源。 一个本地办法接口(JavaNativeInterface, JNI)-使得本地办法能够在特定主机系统的任何一个Java平台实现上运行。 若是但愿运用特定主机上的资源, 那么能够写一个平台相关的Java顺序来调用本地办法。 若是但愿保证顺序的平台无关性, 那么只能通过JavaAPI来访问底层系统资源。 启动类装载器(这是系统中独一的)是Java虚拟机实现的一局部。 Java运用顺序可以在运行时安装用户定义的类装载器, 这种类装载器可以运用自定义的方式来装载类。 例如, 从网络下载class文件。 而用户定义的类装载器不是, 可以被编译成class文件, 还可以像其它对象同样实例化。 因此不用再编译的时候就晓得运行中的Java运用顺序中最终会加入的全部的类。 当它运行时, 运用顺序可以处理它须要哪些额定的类, 可以决议是运用一个或是更多的用户定义的类装载器来装载。 因此用任何在Java代码中能够表述的风格来进行类装载。 能够从某些数据库中获取??踔量梢远???伞?看到它究竟是被启动类装载器仍是被用户定义类装载器装载。 当被装载的类引用了另一个类时, 例如, 它就会运用这个类装载器装载Volcano类运用的全部类。 通过这种办法, 运行时的Java顺序中的每个类装载器都有本身的命名空间。 Java运用顺序能够建立多少个(或多少种)被不一样的类装载器装载的类寄存在不一样的命名空间中, 当编写一个Java运用顺序的时候, 从不一样源文件装载的类能够分隔在不一样的命名空间中。 通过这种办法, 就可以运用Java类装载器的体系构造来控制任何不一样源文件中装载的代码之间的互相影响, 这个用户定义的类装载器一般被称为JavaApplet类装载器, 它晓得如何向HTTP效劳器央求class文件。 只有当浏览器遇到有Javaapplet的页面时, 才决议是否须要下载class文件。 Web浏览器启动的Java运用顺序一般为每一个提供class文件的网络地址分别建立不一样的用户定义类装载器, 所以, 这就能够把它们分别放置在Java主机运用顺序的不一样命名空间之下。 恶意的Javaapplet代码就不会直接访问从别的中央下载的class文件。 这就可以限制或阻止不一样来源的代码之间的互相访问。 这种途径途径打破了C或者C++等言语所遵循的传统, 运用这些传统言语写的顺序一般首先被编译, 而后被链接成独自的、专门支持特定硬件平台和操做系统的二进制文件。 一般情况下, 一个平台上的二进制可执行文件不能在其余平台上工做。 当编译和链接一个C++顺序时, 所取得的可执行二进制文件只能在指定的硬件平台和操做系统上运行, 而Java编译器把Java源文件的指令翻译成字节码, 这种字节码就是Java虚拟机的机器言语。 class文件设计得紧凑, 所以它们能够快速地在网络上传送。 其次, 因为Java顺序是动态链接和动态扩展的, class文件能够在须要的时候才下载。 从而能够最大限度地减小终端用户的等候时间。 JavaAPI通过支持平台无关性和平安性, 使得Java顺应于网络运用。 它提供了一套访问主机系统资源的规范办法。 虚拟机装载顺序的class文件所运用的JavaAPIclass文件。 全部被装载的class文件(包括从运用顺序中和从JavaAPI中提取的)和全部曾经装载的动态库(包含本地办法)共同组成了再Java虚拟机上运行的整个顺序。 在一个平台能偶支持Java顺序之前, 必需在这个特定平台上明白地实现API的功能。 为访问主机上的本地资源, 因为JavaAPIclass文件调用了本地办法, 对Java顺序而言, 不管平台外部如何, JavaAPI都会有一样的表现和可预测的行为。 正是因为在每一个特定的主机平台上明白地实现了Java虚拟机和JavaAPI, 所以, JavaAPI在Java平安性模型方面也有贡献。 都会通过查询访问控制器来检验是否获得了受权。 访问控制器是一个类, 该类用来执行栈检验, 已决议是否容许某种操做。c++