20190506Java学习JVM与编译器

mac2022-06-30  19

编译器方便了代码编码,对程序员的代码能力要求降低了很多;如果是面对JVM编码,程序员要面临的挑战更多更可怕,首先自身代码能力是个问题,其次二进制编码也很头痛...

<下面这段话,是我借鉴Java学习书籍与稍微修改了,有错误请指正哈>

Java虚拟机:只有我才能让程序运行起来。你只是产生文件而已。做个文件有什么了不起的,没有我,文件也没有用。编译器:请你放尊重点,不然我要叫了。

Java虚拟机:还有,你得理不饶人,每天老是警告人,小小一点语法错误也不放水......编译器:对不起,没有我你能运行什么?Java设计成这样是有原因的。如果Java只是个直译语言,要一边运行一边解译纯文字的程序,我就不相信你能够运行这么快;Java虚拟机:抗议啦,我又不是说你一点用处都没有。但说真的,我根本搞不懂你在做什么。程序员可以直接编写二进制代码给我运行,那你就失业啦,哇哈哈哈......编译器:我实在懒得理你。没错,虽然说只要合格的二进制代码就可以运行,不一定要编译器编译出来的。但实际上不会有人傻成这样的。让程序员直接写出二进制代码 就好像组装计算机的人自己得做出CPU一样。还有,你可不可以不要笑得那么难听...Java虚拟机:先不管我的笑声问题,你先说说你到底有啥用吧。编译器:还记得Java是个强类型的语言吗,这代表我不能容许变量保存类型的数据。这是很关键的类型安全功能,我能让大部分的错误在到你那边之前就能被抓到,还有......Java虚拟机:又不是全部抓光光!我还是会因为遇到将错误类型的数据塞进数组中而不得不抛出异常,并且......编译器:没礼貌,别打断我说话......是有些类型数据的错误会在运行时发生,但这也是为了容许动态绑定这样的功能。Java可以在执行期引用连程序员也没有预期会碰 到的类型,所以我得留一些可用的可能性。我的工作就是要确保铁定不能跑的代码错误直接抛出异常。通常我会抓的错误,比如把文字字符串除以某个数字这种问题直接报错。Java虚拟机:OK,当然。但是存取权限的安全问题呢?还不是靠我把关,而你只不过是做点标点符号的检查罢了。还真谢谢你把这些问题留给我呢。编译器:对不起,大家都知道我是安全的第一线。我刚刚说的数据类型错误如果没有处理好可能会是一个漏洞呢。像是违反调用private方法的程序等也是由我检查的。我能够 防止人们动到不可以碰的程序代码与其他类的重要数据。如果要把我的功能说完,可能要说到天亮了......Java虚拟机:随你怎么说,我也得做相同的事情,确保有人在执行前不会修改二进制代码。编译器:是啦,如果没有我挡住上述问题,你老早就挂掉了。没时间了,下回再说吧。Java虚拟机:OK,等一下要不要去吃夜宵?

转载于:https://www.cnblogs.com/Pbyang/p/10822545.html

最新回复(0)