Java核心技术解析:虚拟机、类加载器、Class文件与API详解
创始人
2024-12-15 14:17:16
0 次浏览
0 评论
java的核心技术有哪些
第一:Java虚拟机Java虚拟机的主要功能是安装类文件并执行其中的字节码。第二:类加载器体系结构Java应用程序可以使用两种类型的类加载器:“引导”类加载器和用户定义的类加载器。
第三:JavaClass文件JavaClass文件使Java更加适合网络,主要体现在平台独立性和网络移动性方面。
第四:JavaAPIJavaAPI通过支持平台独立性和安全性,使Java非常适合网络应用程序。
Java的核心技术什么?
第一:Java虚拟机Java虚拟机的主要任务是安装class文件并执行其中的字节码。Java虚拟机包含一个类加载器,它可以从程序和API加载类文件。
在JavaAPI中,只会加载程序执行所需的那些类。
字节码由执行引擎执行。
在不同的Java虚拟机中,执行引擎的实现方式可能有很大不同。
在软件实现的虚拟机中,最简单的执行引擎就是解释一次字节码。
另一种执行引擎速度更快,但也消耗更多内存,称为“即时编译器”。
在这种情况下,第一个执行的字节码被编译为本机机器代码。
编译后的本机机器代码会被缓存,并可以在以后调用该方法时重用。
第三个执行引擎是自适应优化器。
在这种方法中,虚拟机最初解释字节码,但监视正在运行的程序的活动并记录最常用的代码段。
程序运行时,虚拟机只将最频繁活动的代码编译为本地代码。
其他代码不经常使用并保留为字节码-并且虚拟机继续解释它们。
自适应优化器可以使Java虚拟机在80%到90%的时间执行优化的本机代码,而只需要编译10%到20%影响性能的代码。
当Java虚拟机是在主机操作系统上用软件实现时,Java程序通过调用本地方法与主机进行交互。
Java中有两种方法:Java方法和本机方法。
Java方法是用Java语言编写的,编译成字节码文件,并存储在类文件中。
本机方法用其他语言(例如C、C++或汇编语言)编写并编译为特定于处理器的机器代码。
本地方法存储在动态链接库中,其格式是每个平台专有的。
当运行中的Java程序调用本地方法时,虚拟机会加载包含本地方法的动态库并调用该方法。
Native方法是Java程序与底层主机操作系统之间的连接方法。
第二:类加载器体系结构Java应用程序可以使用两种类型的类加载器:“引导”类加载器和用户定义的类加载器。
启动类加载器(系统中唯一的)是Java虚拟机实现的一部分。
启动类加载器通常会使用一些默认的方法从本地磁盘加载类,包括JavaAPI类(启动类加载器也称为原始类加载器、系统类加载器或默认类加载器)。
Java应用程序可以在运行时安装用户定义的类加载器,从而可以以自定义的方式加载类。
例如,从Internet下载类文件。
虽然启动类加载器是虚拟机实现中必不可少的一部分,而用户自定义类加载器不是,但是用户自定义类加载器可以用Java编写,可以编译成class文件,可以被虚拟机,并且可以像其他对象一样实例化。
得益于用户定义的类加载器,无需在编译时知道最终将添加到正在运行的Java应用程序中的所有类。
用户定义的类加载器使得运行扩展的Java应用程序成为可能。
当它运行时,应用程序可以确定它需要哪些附加类,并可以决定是否使用一个或多个用户定义的类加载器来加载它们。
因为类加载器是用Java编写的,所以类加载可以用任何可以用Java代码表达的风格来完成。
这些类可以通过网络下载、从某个数据库获取,甚至动态生成。
当每个类被加载时,Java虚拟机监控类以查看它是由启动类加载器加载还是由用户定义的类加载器加载。
当加载的类引用另一个类时,虚拟机使用加载第一个类的类加载器来加载引用的类。
例如,如果虚拟机使用特定的类加载器来加载Volcano类,那么它将使用这个类加载器来加载Volcano类使用的所有类。
由于Java虚拟机是这样加载类的,所以加载的类默认只能看到同一个类加载器加载的其他类。
通过...这样,Java的架构允许在Java应用程序内建立多个命名空间。
运行时Java程序中的每个类加载器都有自己的命名空间。
一个Java应用程序可以创建任意多个(或多个)类,由不同的类加载器加载并存储在不同的命名空间中。
除非应用程序明确允许,否则它们无法相互访问。
编写Java应用程序时,从不同源文件加载的类可以分隔在不同的命名空间中。
通过这种方式,Java类加载器架构可以用来控制任何不同源文件中加载的代码之间的交互,特别是防止恶意代码获得访问或破坏善意代码。
动态扩展的一个示例是Web浏览器,它使用用户定义的类加载器从网络下载Javaapplet的类文件。
Web浏览器使用安装用户定义的类加载器的Java应用程序。
这个用户定义的类加载器通常称为JavaApplet类加载器,它知道如何从HTTP服务器请求类文件。
JavaApplet可以作为动态扩展的例子,因为Java应用程序不知道什么时候开始从网络下载浏览器请求的类文件。
只有当浏览器遇到带有Javaapplet的页面时,才会决定是否下载该类文件。
Web浏览器启动的Java应用程序通常会为提供类文件的每个网络地址创建不同的用户定义的类加载器。
因此,不同的用户定义的类加载器从不同的源加载类文件。
这允许将它们放置在Java主机应用程序的不同命名空间下。
由于不同来源的Javaapplet文件放置在不同的命名空间中,恶意Javaapplet代码不会直接访问从其他地方下载的类文件。
这可以限制或阻止来自不同来源的代码相互访问。
第三:Javaclass文件Javaclass文件主要是让Java在平台独立性和网络移动性方面更加适合网络。
它在平台独立性方面的任务是为Java程序提供独立于底层主机平台的二进制形式的服务。
这种方法打破了C或C++等语言所遵循的传统,其中用这些传统语言编写的程序通常首先被编译,然后连接成单独的二进制文件,这些二进制文件旨在支持特定的硬件平台和操作系统。
通常,一个平台上的二进制可执行文件无法在其他平台上运行。
Javaclass文件是二进制文件,可以在任何支持Java虚拟机的硬件平台和操作系统上运行。
当编译和链接C++程序时,生成的可执行二进制文件只能在指定的硬件平台和操作系统上运行,因为该二进制文件包含目标处理器的机器语言。
Java编译器将Java源文件的指令翻译成字节码。
这个字节码就是Java虚拟机的“机器语言”。
类文件设计得紧凑,因此可以通过网络快速传输。
其次,由于Java程序是动态连接、动态扩展的,所以需要时可以下载class文件。
此功能允许Java应用程序进行调度从网络下载类文件,从而最大限度地减少最终用户的等待时间。
第四:JavaAPIJavaAPI通过支持平台独立性和安全性使Java适应网络应用。
JavaAPI是运行时库的集合,它提供了访问主机系统资源的标准方法。
运行Java程序时,虚拟机会加载该程序的类文件所使用的JavaAPI类文件。
所有加载的类文件(包括从应用程序和JavaAPI中提取的类文件)和所有加载的动态库(包括本地方法)共同构成了在Java虚拟机上运行的整个程序。
在平台能够支持Java程序之前,API的功能必须在该特定平台上显式实现。
为了访问主机上的本地资源,JavaAPI调用本机方法。
由于JavaAPI类文件调用本机方法,因此Java程序不需要再调用它们。
通过这种方式,JavaAPI类文件为Java程序提供了与底层主机的独立于平台的标准接口。
对于Java——从编程角度来说,无论平台内部如何,JavaAPI的行为都是相同的并且是可预测的。
正是因为Java虚拟机和JavaAPI在各个特定的宿主平台上显式实现,Java程序本身才能成为平台无关的程序。
JavaAPI还对Java安全模型做出了贡献。
JavaAPI方法在执行任何潜在危险操作(例如本地磁盘写入操作)之前,都会通过查询访问控制器来检查是否获得授权。
访问控制器是执行堆栈检查以确定是否允许操作的类。
Java的核心技术是什么?
JDBC、JNDI、EJBS、RMI、JSP、JAVASERVLETS、XML、JMS、JAVAIDL、JTS、JTA、JAVAMAIL和JAF是J2EE的核心技术。说白了,一切都是符合WEB和面向对象开发的。
对于J2SE,你只需要了解面向对象,熟悉类并熟练使用逻辑即可。
相关文章
C语言与Java:就业前景对比,选择哪门...
2024-12-16 05:42:54Java类间方法调用与对象创建全解析
2024-12-16 17:45:38Java开发工程师职责详解:工作内容与技...
2024-12-17 21:13:59Java与JavaWeb:基础与Web开...
2024-12-14 11:40:51Python编程:一探究竟,1到100间...
2024-12-14 21:11:25Java编程教程:轻松实现1-100偶数...
2024-12-17 01:50:31Web开发语言解析:JavaEE、Jav...
2024-12-15 23:51:29Java运行无障碍:环境变量配置及常见问...
2024-12-15 13:12:05Java字符串转数组详细解析与代码示例
2024-12-16 03:43:41C++字符串比较:无需函数直接大小比较的...
2024-12-15 22:13:39最新文章
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
热门文章
1
SQL多表连接查询全解析:JOIN语句应...
sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...
2
Java中字符串类型详解:String与...
变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...
3
JavaSE与JavaEE:从基础到企业...
javase 和javaee的区别?JavaSE和JavaEE...
4
Java程序员面试必知:核心技术问答与技...
java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...
5
Java.exe与Javaw.exe:区...
程序中java和javaw有什么区别java和javaw的区别:两者都是Java...
6
深入解析:Java中的javax包及其与...
JAVA导入时,什么是javax?awt是java1.0,swing是java2...
7
大专生转行自学Java,迷茫时如何找到方...
我是大专生因没有好好学所以现在后悔了我想从事软件编程我正在自学java不知道怎么...
8
Java中Scanner类导入位置及使用...
在java中这句语言“importjava.util.Scanner;”是什么意...
9
Java数组倒序输出:排序后逆序存储方法...
Java数组倒序输出?1.反转数组的方法有很多种,比如先排序,然后倒序存储pub...
10
C语言改错难题解析:第二处错误详解及修改...
请问这个C语言改错题怎么做呀?我做了很久都没写出来,第二处错误不知道怎么改。那位...