今天早起失败,加上忙碌的一天加班工做,没按计划总结Java相关的技术,刚看到下面的文章总结的不错,转载一下。java
Java有哪四个核心技术?首先,咱们要了解一下java核心技术的重要性,它能够帮助咱们触类旁通、举一反三,有助于提高咱们对整个Java平台的理解力。c++
第一:Java虚拟机 数据库
Java虚拟机的主要任务是装在class文件而且执行其中的字节码。Java虚拟机包含一个类装载器,它能够从程序和API中装载class文件。Java API中只有程序执行时须要的那些类才会被装载。字节码由执行引擎来执行。不一样的Java虚拟机中,执行引擎可能实现得很是不一样。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另外一种执行引擎更快,可是也更消耗内存,叫作"即时编译器(just-in-time compiler)"。在这种状况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法之后被调用的时候能够重用。第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,可是会监视运行中程序的活动,而且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地代码,其余的代码因为使用得不是很频繁,继续保留为字节码-由虚拟机继续解释它们。一个自适应的优化器可使得Java虚拟机在80%~90%的时间里执行被优化过的本地代码,而只须要编译10%~20%的对性能有影响的代码。 当Java虚拟机是由主机操做系统上的软件实现的时候,Java程序经过调用本地方法(native method)和主机交互。Java中有两种方法: Java方法和本地方法。Java方法是由Java语言编写,编译成字节码文件,存储在class文件中的。本地方法是由其余语言(好比c,c++或汇编语言)编写的,编译成何处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专有的。运行中Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。本地方法是联系Java程序和底层主机操做系统的链接方法。bootstrap
第二:类装载器的体系结构浏览器
一个Java应用程序可使用两种类装载器:"启动(bootstrap)"类装载器和用户定义的类装载器。启动类装载器(这是系统中惟一的)是Java虚拟机实现的一部分。启动类装载器一般使用某种默认方式从本地磁盘中装载类,包括Java API类(启动类装载器也被称为原始类装载器、系统类装载器或者默认类装载器)。 Java应用程序可以在运行时安装用户定义的类装载器,这种类装载器可以使用自定义的方式来装载类。例如,从网络下载class文件。尽管启动类装载器是虚拟机实现的本质部分,而用户定义的类装载器不是,但用户定义的类装载器可以用Java来编写,可以被编译成class文件,可以被虚拟机装载,还可以像其它对象同样实例化。 因为有用户定义类装载器,因此没必要再编译的时候就知道运行中的Java应用程序中最终会加入的全部的类。用户定义的类装载器使得在运行扩展Java应用程序成为可能。当它运行时,应用程序可以解决它须要哪些额外的类,可以决定是使用一个或是更多的用户定义的类装载器来装载。因为类装载器是用Java编写的,因此用任何在Java代码中能够表述的风格来进行类装载。这些类能够经过网络下载,能够从某些数据库中获取,甚至能够动态生成。 每个类被装载的时候,Java虚拟机都监视这个类,看到它究竟是被启动类装载器仍是被用户定义类装载器装载。当被装载的类引用了另一个类时,虚拟机就会使用装载第一个类的类装载器装载引用的类。例如,若是虚拟机使用一个特定的类装载器装载Volcano这个类,它就会使用这个类装载器装载Volcano类使用的全部类。 因为Java虚拟机采起这种方式进行类的装载,因此被装载的类默认状况下只能看到被同一个类装载器装载的别的类。经过这种方法,Java的体系结构容许在一个Java应用程序中创建多个命名空间。运行时的Java程序中的每个类装载器都有本身的命名空间。 Java应用程序能够建立多少个(或多少种)被不一样的类装载器装载的类存放在不一样的命名空间中,它们不能相互访问,除非应用程序显示地容许这么作。当编写一个Java应用程序的时候,从不一样源文件装载的类能够分隔在不一样的命名空间中。经过这种方法,就可以使用Java类装载器的体系结构来控制任何不一样源文件中装载的代码之间的相互影响,特别是可以阻止恶意代码获取访问或破坏善意代码的权限。 Web浏览器是一个动态扩展的例子,Web浏览器使用用户定义的类装载器从网络下载用于Java applet的class文件。Web浏览器使用一个用来安装用户定义类装载器的Java应用程序。这个用户定义的类装载器一般被称为Java Applet类装载器,它知道如何向HTTP服务器请求class文件。Java Applet能够做为动态扩展的例子,由于Java应用程序并不知道它何时会开始从网络下载浏览器请求的class文件。只有当浏览器遇到有Java applet的页面时,才决定是否须要下载class文件。 Web浏览器启动的Java应用程序一般为每一个提供class文件的网络地址分别建立不一样的用户定义类装载器,所以,不一样的用户定义类装载器装载不一样来源的class文件。这就能够把它们分别放置在Java主机应用程序的不一样命名空间之下。因为不一样来源的Java applet文件放置在不一样的命名空间中,恶意的Java applet代码就不会直接访问从别的地方下载的class文件。这就可以限制或阻止不一样来源的代码之间的相互访问。缓存
第三:Java class文件安全
Java class文件主要在平台无关性和网络移动性方面使Java更适合网络。它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。这种途径途径打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序一般首先被编译,而后被链接成单独的、专门支持特定硬件平台和操做系统的二进制文件。一般状况下,一个平台上的二进制可执行文件不能在其余平台上工做。而Java class文件是能够运行在任何支持Java虚拟机的硬件平台和操做系统上的二进制文件。 当编译和链接一个C++程序时,所得到的可执行二进制文件只能在指定的硬件平台和操做系统上运行,由于这个二进制文件包含了对目标处理器的机器语言。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的"机器语言"。class文件设计得紧凑,所以它们能够快速地在网络上传送。其次,因为Java程序是动态链接和动态扩展的,class文件能够在须要的时候才下载。这个特色使得Java应用程序可以安排从网络上下载class文件的时间,从而能够最大限度地减小终端用户的等待时间。服务器
第四:Java API 网络
Java API经过支持平台无关性和安全性,使得Java适应于网络应用。Java API是运行库的集合,它提供了一套访问主机系统资源的标准方法。运行Java程序时,虚拟机装载程序的class文件所使用的Java API class文件。全部被装载的class文件(包括从应用程序中和从Java API中提取的)和全部已经装载的动态库(包含本地方法)共同组成了再Java虚拟机上运行的整个程序。 在一个平台能偶支持Java程序之前,必须在这个特定平台上明确地实现API的功能。为访问主机上的本地资源,Java API调用了本地方法。因为Java API class文件调用了本地方法,Java程序就不须要再调用它们了。经过这种方法,Java API class文件为底层主机提供了具备平台无关性、标准接口的Java程序。对Java程序而言,不管平台内部如何,Java API都会有一样的表现和可预测的行为。正是因为在每一个特定的主机平台上明确地实现了Java虚拟机和Java API,所以,Java程序自身就可以成为具备平台无关性的程序。 Java API在Java安全性模型方面也有贡献。当Java API的方法进行任何有潜在危险的操做(好比进行本地磁盘写操做)以前,都会经过查询访问控制器来检验是否获得了受权。访问控制器是一个类,该类用来执行栈检验,已决定是否容许某种操做。app