面对过程与面对对象区别,java性能低是否是这个原因?

一、面对对象与面对过程差别

  • 面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展
  • 面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。

二、java性能低的原因

引用JavaGuide里的一段话

面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是面向对象语言,而是Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码。而面向过程语言大多都是直接编译成机械码在电脑上执行,并且其它一些面向过程的脚本语言性能也并不一定比Java好。

通过这段话可能了解的不是很透彻,因为没有提到java实际是什么语言。而实际上,java是半编译半解释语言。具体来看看百度百科对编译语言与解释语言的定义:

编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,
直接使用编译的结果就行了。
解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。

比如我们现在有使用高级语言编写的10行代码的程序: 如果它是使用编译型语言编写的,那么它的执行方式就是:
先把这10行代码通过编译器全部编译成机器指令码的文件,然后再让计算机运行。

在这里插入图片描述

如果它是使用解释型语言编写的,那么它的执行方式就是:通过解释器一行一行的将代码翻译成机器指令码执行。

在这里插入图片描述

而对于Java代码来说,是将源文件(.java文件)先编译成字节码文件(.class文件),然后再在Java虚拟机(JVM)中解释执行。

在这里插入图片描述

  • 那么什么又是字节码文件?
  • 字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
  • 采用字节码的好处:
  • Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

在Hotspot(Java虚拟机中的一种)中存在JIT即时编译器,能够捕获程序中的热点代码,编译成机器码缓存起来存入方法区中,当遇到相同的代码时,不必再去使用解释器翻译,直接去找对应的机器码执行。避免解释器重复多次的解释执行。

猜你喜欢

转载自blog.csdn.net/weixin_45938441/article/details/123168237