java语言有哪些核心机制?

Python027

java语言有哪些核心机制?,第1张

Java语言包含三种核心机制:Java 虚拟机、垃圾收集机制和代码安全检测。

1、Java 虚拟机(Java Virtual Machine,JVM)

在一台计算机上由软件或硬件模拟的计算机。Java虚拟机读取并处理经编译过的平台无关的字节码class文件

2、垃圾收集机制(Garbage collection)

在C/C++ 等语言中,由程序员负责回收无用内存。Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。

3、代码安全性检测(Code Security)

Java执行代码的时候,由JVM对运行的代码进行安全性检测,当进行一些非法操作的时候,比如修改一些系统设置的时候,JVM会发出警告。

Java程序的运行机制如下:

编写Java源代码:程序员使用Java编程语言编写Java源代码,通过编写不同的类和方法来实现不同的功能。

编译Java源代码:使用Java编译器将Java源代码编译成Java字节码文件(.class文件),字节码文件包含了Java源代码所表示的指令集和类信息。

解释Java字节码:Java虚拟机(JVM)读取Java字节码文件,并在计算机内存中创建Java虚拟机实例(JVM实例)。JVM会对字节码进行解释执行,并将Java字节码转化为机器码运行。

运行Java程序:当Java程序被启动时,JVM会调用Java类的main()方法,这个方法是程序的入口点,通过main()方法开始执行Java程序。

加载Java类:当JVM需要加载Java类时,它会在内存中查找类文件,如果找到了就将类加载到内存中。如果找不到类文件,则JVM会抛出ClassNotFoundException异常。

执行Java程序:JVM会解释和执行Java字节码,并调用程序员编写的方法来完成相应的任务。程序员可以通过Java API提供的类库来实现不同的功能。

内存管理:JVM会对Java程序所使用的内存进行管理,包括内存分配、内存回收等。

异常处理:当Java程序运行出现异常时,JVM会自动抛出异常,并且调用异常处理程序来处理异常。

终止Java程序:Java程序运行完成后,JVM会释放占用的内存资源,并终止程序的运行。

综上所述,Java程序的运行机制是通过编写Java源代码,编译成Java字节码文件,通过JVM解释执行Java字节码,最终将程序转化为机器码运行。

》类装载器结构(classloader)\x0d\x0a\x0d\x0a》class文件检查器(theclassfileverifier)\x0d\x0a\x0d\x0a》内置于Java虚拟机(及语言)的安全特性\x0d\x0a\x0d\x0a》安全管理器及JavaAPI(securitymanager)\x0d\x0a\x0d\x0a在Java沙箱中,类装载器体系结构是第一道防线。它在三个方面对Java的沙箱起作用:\x0d\x0a\x0d\x0a1>它防止恶意代码区干涉善意的代码\x0d\x0a\x0d\x0a2>它守护了被信任的代码的边界\x0d\x0a\x0d\x0a3>它将代码归于某类(称为保护域),该类确定了代码可以进行哪种操作\x0d\x0a\x0d\x0aClass文件检查器:\x0d\x0a\x0d\x0aClass文件检查器保证装载的class文件内容有正确的内部结构,并且这些class文件互相间协调一致。Class文件检查器实现的安全目标之一就是程序的健壮性。如果某个有漏洞的编译器,或某个聪明的黑客,产生了一个class文件,而这个class文件中包含了一个方法,则合格方法的字节码中含有一条跳转到方法之外的指令,那么,一旦这个方法被调用,它将导致虚拟机的崩溃,所以,处于对健壮性的考虑,由虚拟机检验它装载的字节码的完整性非常重要。\x0d\x0a\x0d\x0aClass文件检查器要进行四趟独立的扫描来完成它的操作。\x0d\x0a\x0d\x0a第一趟:Class文件的结构检查\x0d\x0a\x0d\x0a在这一趟扫描中,对每一段将被当做类型导入的字节序列,Class文件检查器都会确认它是否符合JavaClass文件的节本结构。在这一趟检查中检查器会进行很多检查例如:每个Class文件都必须以四个同样的字节开始:0xCAFEBABE。因为这个魔数Class文件分析器会很容易判断出某个文件具有明显问题而加以拒绝。检查器还必须确认在Class文件中声明的版本号和次版本号,这个版本号必须在这个虚拟机实现可以支持的范围之内。而且第一趟扫描还必须确认这个Class文件有没有被删减。总之第一趟扫描的目的就是保证这个字节序列正确的定义了一个新类型。\x0d\x0a\x0d\x0a第二趟:类型数据的语义检查\x0d\x0a\x0d\x0a第二趟扫描,检查器要查看每个组成部分,确认它们是否是其所属类型的实例,他们的结构是否正确。另外还要检查这个类本身是否符合特定的条件,它们是由Java编程语言规定的。例如,检查器强制规定除Object类以外的类必须有一个超类,或者检查final类有没有被子化等。\x0d\x0a\x0d\x0a第三趟:字节码验证\x0d\x0a\x0d\x0a这一趟是要确保采用任何路径在字节码流中都得到一个确定的操作码,确保操作数栈总是包含正确的数值以及正确的类型。\x0d\x0a\x0d\x0a第四趟:符号引用的验证\x0d\x0a\x0d\x0a在动态链接的过程中,如果包含在一个Class文件中的符号引用被解析时,Class文件检查器要进行第四趟检查。第四趟扫描仅仅是动态链接过程的一部分。当一个Class文件被装载时,它包含了对其他类的符号引用以及它们的字段和方法。一个符号引用是一个字符串,它给出了名字,并且可能还包含了其他关于这个被引用项的信息------这些信息必须足以唯一的识别一个类、方法、字段。这样对于其他类的符号引用必须给出这个类的全名;对于其他类的字段的符号引用必须给出类名、字段名以及字段描述符;对于其他类中的方法的引用必须给出类名、方法名以及方法的描述符。\x0d\x0a\x0d\x0a所谓的动态链接是一个将符号引用解析为直接引用的过程。\x0d\x0a\x0d\x0a此外,由于Java程序是动态链接的,所以Class文件检查器在进行第四次扫描中,必须检查相互引用类之间的兼容性。\x0d\x0a\x0d\x0a除此之外,Java虚拟机还有一些内置的安全特性:\x0d\x0a\x0d\x0a》类型安全的引用转换\x0d\x0a\x0d\x0a》结构化的内存访问\x0d\x0a\x0d\x0a》自动垃圾收集(不必显式地释放被分配的内存)\x0d\x0a\x0d\x0a》空引用检查\x0d\x0a\x0d\x0a通过保证一个Java程序只能使用类型安全的、结构化的方法去访问内存,Java虚拟机使得Java程序更为健壮。