下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

c/c++编译过程和Java编译过程之间的区别

作者:课课家教育     来源: http://www.kokojia.com点击数:1408发布时间: 2016-11-17 10:15:32

标签: 编译程序c/c++编译Java

大神带你学编程,欢迎选课

  在这篇教程中,小编要向大家描述一下java编译原理、c/c++编译过程和Java编译过程之间的区别,Java编译程序将java的源程序编译成为jvm可执行代码--java字节码。为了可以非常有效的达到保证java的安全性以及可移植性的目的,Java编译器不确定在程序执行过程中的内存布局,也不将对方法以及变量的引用编译成为数值引用,而是把这些所用到的符号引用信息通通都保留在字节码当中,然后由解释器在运行过程中创立一个内存布局,接着我们再通过查表的方法来确定一个方法所存在的地址。如果想了解详细的情况,请接着往下看哟!

  一、jvm工作原理

  解释器的主要功能之一就是完成运行jvm字符码的工作。一般情况下,它的解释执行过程可以分为装入代码、校验代码以及执行代码这三步来进行的。那么我们现在就一起来了解一下这三个部分吧,看看他们之间有什么联系吧。

  首先要说的就是装入代码这一过程,代码的装入工作一般是由“类装载器classloader”来完成的。类装载器classloader主要负责装入运行一个程序需要用到的所有代码,当然啦,这也包括了程序代码中的被调用的类以及类所继承的类。当类装载器classloader装入一个类的时候,这个类就会被放在自己的名字空间里面去。除了只可以通过符号引用自己名字空间以外的类的方法以外,类之间也没有其他的办法可以影响到其他的类。通过这个过程,大家可以发现一个情况就是:为了使得本地类只需要通过共享相同的名字空间就可以获得比较高的运行效率,同一时间又可以达到保证它们与从外部引进的类都不会相互的影响的目的。在本台计算机中的所有类都在同一个地址空间中,而所有从外部引入进来的类,都会拥有一个属于自己独立的名字空间。

  恩,以上就是装入代码的整个过程了。当解释器装入了运行程序所需要的所有类以后,那么就可以把整个可执行程序的内存布局确定下来了。解释器为特定的地址空间和符号引用建立了一个查询表以及对应关系。只需要通过在这一个操作阶段所确定代码的内存布局,java就可以非常好地解决类似于由超类改变而使子类崩溃的问题了,同一时间,它还可以防止了代码的非法访问的问题。

  好了,当把装入代码的操作完成以后,接下来,我们就要对被装入的代码进行一系列的检查了,毕竟只有检查安全过后才可以执行代码的。而检查代码这个过程,往往就是由字节码校验器执行的。字节码校验器可以发现很多种错误,比如说:非法数据类型转化、操作数栈益处等等错误。只要通过校验器的校验检测,发现没有任何错误以后,那么代码就可以开始执行了。

  二、c/c++编译过程和Java编译过程不同

  通常情况下,Java编译程序是可以把java的源程序编译成为jvm可执行代码——即java字节码。那么大家知道我们常用的c/c++编译和Java编译方法,在这两个编译过程当中有什么不同之处吗?具体的不同之处如下:

  ①Java编译过程

  为了可以非常有效的达到保证java的安全性以及可移植性的目的,Java编译器不确定在程序执行过程中的内存布局,也不将对方法以及变量的引用编译成为数值引用,而是把这些所用到的符号引用信息通通都保留在字节码当中,然后由解释器在运行过程中创立一个内存布局,接着我们再通过查表的方法来确定一个方法所存在的地址。

c/c++编译过程和Java编译过程之间的区别_编译程序_c/c++编译_Java_课课家

  ②c/c++编译过程

  当c/c++编译器在编译生成一个对象的代码的时候,这个对象的代码就是为了可以在某一个特定的硬件平台运行而生成的。为了可以保证编译程序可以正常的运行,因此在这个编译过程中,编译程序通常是通过查表的方法把所有对符号的引用转换成为一个特定的内存偏移量。

c/c++编译过程

  三、java字节码的执行方式

  大家知道java字节码的执行方式有多少种吗?没错,就是两种,分别是解释执行方式以及即时编译方式。具体的执行方式如下:

  ①解释执行方式:顾名思义,在这种执行方式下,解释器就是完成先解释再执行的操作。一般完成java字节码程序的所有操作,是通过每次解释同时并执行一小段的代码来进行。

  ②即时编译方式:在这种执行方式下,解释器一般先把字节编译成为机器码,然后再执行刚刚编译出来的机器码。

  小编总结:

  本教程关于Java编译的内容小编就介绍到这里,如果你对这个java入门教程有兴趣的话,那就赶快来学习一下把,说不定有意外收获哟!感谢大家对课课家教育的大力支持,更多的编程语言教程请关注课课家教育。

赞(1)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程