自学Java第三天

时间:2021-07-20
本文章向大家介绍自学Java第三天,主要包括自学Java第三天使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.Java编译过程与C/C++编译过程的差异
C/C++编译器生成一个对象的代码时,该代码是在某一特定硬件平台下运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。

Java编译时却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了Java的可移植性和安全性

C/C++源代码--机器码

Java源代码--Java字节码--机器码

2.实现跨平台机制
Java实现跨平台无非就是JVM起的作用,可以这样想,如果是C/C++的编译方式,一旦换了一个平台,那么我们就需要重新编译一份对应的可执行代码,但是Java则不同,我们编译好了一份Java字节码,换到不同的平台上时,并不需要重新编译,前提是这些平台上都装了相应平台的JVM,JVM不是跨平台的,但是这是Sun公司的工作:为不同平台提供对应的JVM。所以,实现跨平台的根本机制还是JVM

3.Java解释器执行过程
执行过程分为三步:代码的装入、代码的检验和代码的执行
类加载器(ClassLoader)负责加载装入运行一个程序所需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放 在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同一地址空间内,而所有从外 部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入 了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的 内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
随后,被装入的代码由字节码检验器进行检查,检验器可以检查出操作数栈溢出,非法数据类型等多种错误。通过校验后,代码就开始执行了。

原文地址:https://www.cnblogs.com/wyq134214/p/15037161.html