Snailclimb / JavaGuide

「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!
https://javaguide.cn
Apache License 2.0
146.5k stars 45.57k forks source link

面向过程 :面向过程性能比面向对象高?? #431

Open ryouaki opened 5 years ago

ryouaki commented 5 years ago

面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。

----》》 这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是面向对象语言,而是Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码。

而面向过程语言大多都是直接编译成机械码在电脑上执行,并且其它一些面向过程的脚本语言性能也并不一定比Java好。

Rehoni commented 2 years ago

所以按我的理解是,面向过程和面向对象只是思想,不存在两者之间比较效率和性能的情况,还是得拿出场景具体情况具体分析。

Jacklijames commented 2 years ago

学习了

SandroDickens commented 2 years ago

Java的性能损失有两个地方: 1.字节码不是最终可执行机器码,虽然有JIT但不是所有字节码都会被JIT 2.JVM内存模型本身的弊端,将太多数据存放到堆而不是栈 面向对象与面向过程之间的性能损失叫做抽象化损失这个概念是C++委员会提出来的,而且抽象化损失仅存在于运行时的多态,编译时的多态是不存在抽象化损失的。 C++委员会一直追求标准库的抽象化损失不能比直接用C实现差,实际上对于绝大部分程序员,他们编写的C代码性能和效率是远超C++的抽象化损失的 所以你会发现STL和Boost里面很多数据结构的性能甚至比你直接用C语言自己造轮子要好,除非你选错了数据结构

Hij888 commented 2 years ago

学习了

aaaabcc2 commented 2 years ago

学习了 谢谢

HsxDeGitHub commented 2 years ago

学习了,学习了

cloudtailor-cyh commented 2 years ago

学习了, 收获很大

jamin77777 commented 1 year ago

C和C++的编译原理是一样的,不适合拿C和C++举例,java效率慢还有一个原因就是分配内存的问题,面向过程的语言大多都是自己分配内存,而面向对象的语言通常是自动帮你分配内存,这里可能就会导致分配内存不当,导致比面向过程的语言占用更多的内存,从而影响运行效率。

jamin77777 commented 1 year ago

哥们,你又不给我科普,你还要恶心我一手,你是真的牛,理工科怎么有你这样的兄弟呢。

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年3月19日(星期天) 晚上10:07 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [Snailclimb/JavaGuide] 面向过程 :面向过程性能比面向对象高?? (#431)

C和C++的编译原理是一样的,不适合拿C和C++举例,java效率慢还有一个原因就是分配内存的问题,面向过程的语言大多都是自己分配内存,而面向对象的语言通常是自动帮你分配内存,这里可能就会导致分配内存不当,导致比面向过程的语言占用更多的内存,从而影响运行效率。 我是看出来了,你是完全不懂JVM,或者你只是背了一些错误过时的八股文。另外Java占用内存多也不是你说的原因。我没必要给你科普,想知道正确答案的话去看看HotSpot

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

SandroDickens commented 1 year ago

我是看出来了,你是完全不懂JVM,或者你只是背了一些错误过时的八股文。 另外Java占用内存多也不是你说的原因。Java对象本身占用的空间就比C++大,不过Java的内存回收机制才是主要原因 没有任何人有义务去给你科普,给你科普那是情分,不给你科普那是本分,想知道正确答案的话去看看HotSpot

C和C++的编译原理是一样的,不适合拿C和C++举例,java效率慢还有一个原因就是分配内存的问题,面向过程的语言大多都是自己分配内存,而面向对象的语言通常是自动帮你分配内存,这里可能就会导致分配内存不当,导致比面向过程的语言占用更多的内存,从而影响运行效率。

jamin77777 commented 1 year ago

哥们你装什么呢,内存回收机制谁不知道似的,原因这么多,就你内存回收机制是原因?博主都已经说过了gc,我说还有别的一些原因不行吗,就你能耐呗

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年3月19日(星期天) 晚上10:16 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [Snailclimb/JavaGuide] 面向过程 :面向过程性能比面向对象高?? (#431)

我是看出来了,你是完全不懂JVM,或者你只是背了一些错误过时的八股文。 另外Java占用内存多也不是你说的原因。Java对象本身占用的空间就比C++大,不过Java的内存回收机制才是主要原因 没有任何人有义务去给你科普,给你科普那是情分,不给你科普那是本分,想知道正确答案的话去看看HotSpot

C和C++的编译原理是一样的,不适合拿C和C++举例,java效率慢还有一个原因就是分配内存的问题,面向过程的语言大多都是自己分配内存,而面向对象的语言通常是自动帮你分配内存,这里可能就会导致分配内存不当,导致比面向过程的语言占用更多的内存,从而影响运行效率。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

SandroDickens commented 1 year ago

就你这点知识量就别出来回复别人了,我都替你觉得丢脸。无知也就算了,还没教养,你是别人儿子吗?别人有义务给你科普?煞笔又不是我生的,我没必要教育它

jamin77777 commented 1 year ago

牛的,你确实蛮有教养的。

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年3月30日(星期四) 晚上9:35 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [Snailclimb/JavaGuide] 面向过程 :面向过程性能比面向对象高?? (#431)

就你这点知识量就别出来回复别人了,我都替你觉得丢脸。无知也就算了,还没教养,你是别人儿子吗?别人有义务给你科普?煞笔又不是我生的,我没必要教育它

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

ChinaFLTV commented 5 months ago

面向过程和面向对象这两个概念是语言层面的,真正比较性能的高低,我们应该去比较其底层运行机理(这里我们比较的指标是代码运行模式:全量编译?部分编译部分解释?全量解释?)是运行机理的不同才导致的其性能的差距。 换言之,如果你面向过程采用的是全量解释,而面向对象采用的是全量编译,那么在这种情况下,面向对象的性能还优于面向过程呢