>  기사  >  백엔드 개발  >  Go의 성능이 Java만큼 좋지 않다고요?

Go의 성능이 Java만큼 좋지 않다고요?

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-24 14:45:281219검색

오늘 Zhihu에서 <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Go</span><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Java</span> 性能对比的问题,这种问题通常只有一个结局,那就是无休止的争论,十年之后,如果这两个语言还健在的话,这可能依然是热门问题:

Go의 성능이 Java만큼 좋지 않다고요?

抛开应用场景谈性能都是耍流氓

目前我主要使用的也是Java和Go,方向是大数据,首先我谈一下我的看法吧:

  • 大部分语言都有它擅长的领域,存在即合理:

    • <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">PHP</span> 擅长构建低成本WEB,也是世界上最好的语言

    • <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">c</span> 擅长操作系统、嵌入式

    • <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Go</span> 天生高并发属性

    • <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">R</span>에 대한 누구도 따라올 수 없는 과학적인 계산과 통계를 봤습니다

    • <span>Python<code style="box-sizing: border-box;background: rgb(243, 241, 241);color: rgb(88, 88, 88);font-size: 16px;line-height: 18px;"><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Python</span> 在AI领域独占鳌头

    • <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">Java</span> 工业级应用服务及Android (长期霸占TIOBE榜第一的老流氓)

  • <span style="color: rgb(74, 74, 74);box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">Benchmarks</span> 的测试数据固然能说明一些问题,但这种测试环境和方式还是不够接地气呀,很少有遇到类似的Case不说,实际使用中也不会因为几ms的差距去换语言重构项目。

  • <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">热点代码</span> ,这个概念很重要,有些代码片段一个月就命中一次,那就不需要多少极致的优化了。

  • <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">28</span>法则,把 80% 的精力花在重要的 20% 的代码上吧,人的精力有限,而且世界上还有很多美好的事情,比如写原创文章分享给大家(手动眨眼)。

  • <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">Talkischeap.Showme the code.</span> AI领域独® 鳌头

<span :>Java</span>

 工业级应用服务及Android(长期霸×TIOBE榜第一的老流氓)

🎜🎜🎜🎜<span style="색상: rgb(74, 74, 74);상자- 크기 조정: 테두리 상자;배경 이미지: 초기;배경 위치: 초기;배경 크기: 초기;배경-반복: 초기;배경 첨부: 초기;배경-원산지: 초기;배경-클립: 초기;디스플레이: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;">벤치마크🎜</span>气呀,很少有遇到类似的Case不说,实际使用中也不会因为几ms的差距去换语言重构项目。🎜🎜🎜🎜🎜<span style="색상: rgb(74, 74, 74);글꼴 크기: 16px;상자 크기: 테두리 -box;배경 이미지: 초기;배경 위치: 초기;배경 크기: 초기;배경-반복: 초기;배경 첨부: 초기;배경-원산지: 초기;배경-클립: 초기;디스플레이: 인라인 블록 ; Padding-Right : 2px; Padding-left : 2px; 라인-하이트 : 22px; "> 热点 代码 代码 🎜 </span> , 这 个 概念 概念 很 重要 重要, 有些 代码 片段 一 一 个 月 就 命 中 次 次 次 次 就 不 需要 需要 多少 极致 极致 的优化了。🎜🎜🎜🎜🎜<span rgb>28🎜</span>법则,把 80% 의 적력 꽃은 20% 의 代码上吧, 人的精力有限, 而且世界上还有很多美好的事情, 比如写原创文章分享给大家(手动眨眼)。🎜🎜 🎜🎜🎜Talkischeap.코드를 보여주세요.🎜 以我的经验来看,目前大请加我微信,带我飞吧。🎜🎜🎜🎜🎜优缺点总结🎜🎜有个朋友回复的内容我觉得不常客观,也比较典型,知乎上抓过来的,侵删。🎜

현재 JAVA의 문제는 성능이 아닙니다. JIT에 의해 자동으로 최적화된 코드는 이미 C와 비슷하기 때문입니다.

JAVA의 문제점은 실제 실제 프로젝트에서 타사 종속성이 너무 많고 아키텍처가 비대하며 설계가 과도하다는 것입니다. 현재로서는 누가 이길지 말하기 어렵습니다.

개인적으로 Go는 기본적으로 표준 라이브러리만 필요하기 때문에 실제 프로젝트에서의 성능은 JAVA보다 낫다고 생각합니다(Go의 코루틴은 기본적으로 비동기 IO 모델이고 Go 언어: 모든 것이 비동기입니다). 게다가 리소스 사용량도 또한 성능의 일부이기도 합니다. 분명히 go는 메모리 사용량이 적고 CPU 소비량이 상대적으로 낮습니다.

Go의 벤치마크 게임은 대부분의 시나리오에서 Java보다 빠르게 실행되며 메모리 소비는 Java의 1/3입니다.

Go의 단점을 나열해 보겠습니다.

  1. 약간의 안티 프로그래머 구문

  2. 제네릭 없음

  3. 표준 라이브러리의 데이터 구조는 Java

  4. 종속성 관리가 형편없습니다

  5. 채널을 부적절하게 사용하면 교착 상태에 빠지기 매우 쉽습니다

  6. 컴파일 중에는 순환 가져오기가 허용되지 않습니다.

  7. 코딩 시 많은 패키지 이름이 사용자 정의 변수 이름과 충돌합니다

  8. Java에서 사용되는 많은 라이브러리 당연히 Go에서 바퀴를 다시 만들어야 한다는 것을 알았습니다

  9. go get 명령은 기록 커밋을 포함하여 전체 git 저장소를 복제합니다

  10. 표준 라이브러리는 루틴 풀을 제공하지 않습니다

  11. 미리 만들어진 Future 메커니즘은 없습니다. 채널을 통해 직접 구현해야 합니다.

당분간 생각나는 문제는 모두 해결될 수 있습니다. Java의 단점:

    언어 표현 능력 부족(현실적인 말로 "어게인"이라고 함 냄새나고 길다")
  1. 메모리 및 CPU 소모가 높음
  2. 힙 메모리가 큰 경우 가비지 수집기는 만족스러운 재활용 결과를 얻기 위해 심층적인 조정이 필요합니다. 그러나 실시간 성능이 필요한 경우에는 전체 GC가 트리거되면 gc가 해결되지 않을 수 있습니다. 지옥이여
  3. 프로그램은 워밍업이 필요해요
  4. JDK는 거대하고 springboot jar 패키지도 거대합니다(문제는 마이크로서비스 아키텍처에서 가장 두드러집니다)

  5. Spring 제품군 버킷이 점점 더 무거워지고 있습니다. IoC AOP)를 사용하게 되어 Family Bucket의 적용은 성능이 좋지 않지만(TechEmpower Round 14의 스프링 위치 참고) 충분히 사용 가능합니다

  6. 성숙한 부분이 너무 많아서 프레임워크와 라이브러리에 대해 많은 사람들이 프로그래밍이란 API를 조정하고 프레임워크를 사용하는 것을 의미한다고 오해하지만, 원칙에 대해서는 거의 알지 못합니다

당분간 이러한 것들이 떠오릅니다. Java의 장점은 이러한 단점보다 훨씬 큽니다. 그렇지 않으면 일년 내내 TIOBE 프로그래밍 언어 순위에서 1위를 차지하지 못할 것입니다.

위 내용은 Go의 성능이 Java만큼 좋지 않다고요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:표준 Go 코드 작성다음 기사:표준 Go 코드 작성