编译器和Java虚拟机的故事

Posted 神奇的Java世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译器和Java虚拟机的故事相关的知识,希望对你有一定的参考价值。

 (Fireside Chats)
 今晚的话题: 
    编译器与虚拟机JVM争辩谁比较重要?


 Java虚拟机
 什么?你开玩笑吧?这位大婶,我可是Java 啊。只有我才难让程序运行起来。你只是产 生文件而已。做个文件有什么了不起,没有我,文件没有用!


            编译器:
             请你放尊重点,不然我要叫了。


 Java虚拟机:
  还有,你得理不饶人,每天老是警告人,小小一点语法错误也不放水…… 
             编译器:
              对不起,没有我你能运行什么?Java会设 计成这样是有原因的。如果Java只是个直译语言,要一边运行一边解释纯文件的程序,我就不相信你能运行有多快。


 Java虚拟机:
  抗议啦,我又没有说你一点用处都没有。但说真的,我根本搞不懂你在做什么。程 序员可以直接编写二进制代码给我运行, 那你就失业了,哇哈哈………哇哈哈哈…… 


              编译器:
               我实在懒得理你。没错,虽然说只要是合格的二进制代码就可以运行,不一定是要编译器编译出来的,但实际上不会有人傻成这样的。让程序员直接写出二 进制代码就好像要组装计算机的人自己得作出来CPU一样。还有,你可不可以不要笑得那么难听?


 Java虚拟机:
  先不要管笑声的问题。你还是没有回答我你到底有什么用处? 


              编译器:
                还记得Java是个强类型语言吗,这代表 我不能容许变量保存类型的数据。这是很关键的类型安全性功能,我能够让大部分的错误在到你那边之前就被抓到。还有…………


 Java虚拟机:
  又不是全部抓光光!我还是会因为遇到将错误类型的数据塞进数组中而不得不抛出异常,并且………… 


              编译器:
               没礼貌,别打断我说话…………是有些数据类型的错误会在运行时发生, 但这也是为了要容许动态绑定这样的功能。Java可以在执行期引用连程序员也 没有预期会碰到的类型,所以我得留一些运用性。我的工作就是要确保铁定不能跑的东西不会过关。通常我会抓得到错误,例如说把文字字符串除以某个数这种问题就会被我发现。


 Java虚拟机:
  ok, 当然。但是存取权限的安全问题呢?还不是靠我把关,而你事不过是作些标点符号的检查摆了。还真谢谢你把这些问题留给我呢。  

                                

              编译器:
               对不起,大家都知道我才是安全的第一线。 我刚刚说的数据类型错误如果没有处理好可是一个漏洞呢。像是违反调用private方法的程序等也是由我检查的。我能够防止人们动到不可以碰的程序代 码与其他类的重要数据。如果要把我的功能说完可能要说到天亮。


  Java虚拟机:
   随你怎么说。我也得相同的事情,确保不会有人在执行前修改二进制代码。     

         
               编译器:
                是啦,如果没有我挡住上述的问题,你老早就挂掉了。没时间了,下回再说吧。


  Java虚拟机:
   ok,等一下要不要吃宵夜?              


以上是关于编译器和Java虚拟机的故事的主要内容,如果未能解决你的问题,请参考以下文章

java编译器和java虚拟机的关系??

java虚拟机工作原理?

java虚拟机工作原理?

虚拟机是怎样运行的,原理是啥?

简述java虚拟机的工作原理

java虚拟机工作原理图解