[請益] 為何Java速度總是輸Python?

看板Soft_Job (軟體人)作者 (打擊出去 外野手退退退退)時間10年前 (2015/06/14 15:53), 10年前編輯推噓9(9014)
留言23則, 14人參與, 最新討論串1/1
最近在玩Leetcode 每次寫完之後去看執行時間分布圖 發現大多時候Java群聚都是被甩到Python後面 照理說身為靜態語言的Java執行時間應該會比動態語言Python快才對不是嗎? 還是說要在迴圈很大的時候Java才會展現其優勢? 對語言的基礎原理不是很了解 感謝各位解答 PS: 我這邊是假設裡面的樣本夠多 所以不管用哪種語言的人所給出的演算法平均時間複雜度都應該很接近 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.173.173 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1434268438.A.57F.html

06/14 16:10, , 1F
btw我有一題用C ac時間居然是最慢的xdd
06/14 16:10, 1F

06/14 16:53, , 2F
因為java有個jvm在下面編譯執行,速度上不可能會太快
06/14 16:53, 2F

06/14 17:37, , 3F
是不是要執行的東西很短,而且連jvm起來的時間也算在內啊?
06/14 17:37, 3F

06/14 17:38, , 4F
java適合長時間運行的東西,因為新建一個jvm的代價算高,
06/14 17:38, 4F

06/14 17:38, , 5F
我看過有jvm寫關於調校的書寫到,如果有個system call太常
06/14 17:38, 5F

06/14 17:40, , 6F
呼叫,就用java寫過,用程式直接去叫,以避免頻繁建立jvm
06/14 17:40, 6F
Leetcode上的程式執行時間的確都很短 Java跑的話大多在350ms左右

06/14 19:26, , 7F
java的效率低落又不是新聞
06/14 19:26, 7F

06/14 21:00, , 8F
樓上 Java論效率可是遠勝Python
06/14 21:00, 8F
我會覺得Java應該要勝過Python是因為之前看到一篇文章 那篇文章是Goole在解釋為什麼要建造一個Java的deep learning framework 上面說雖然Python開發快 但是最後真的要拿來大量運算還是要改寫成C (因為Python不夠快) 而Java的則是速度本身就夠快 寫完之後不需要在改寫成C 單就這段敘述 Java跑起來應該要能夠比Py快才對 不然也沒開發這架構的必要

06/14 21:22, , 9F
真有可能jvm起的時間都算進去了...
06/14 21:22, 9F

06/14 23:01, , 10F
Java慢應該是很久以前的事了吧
06/14 23:01, 10F

06/14 23:03, , 11F
慢要看和誰比 和C比誰都慢…
06/14 23:03, 11F

06/15 01:42, , 12F
java速度應該是比python快 慢的話或許是你程式寫法有問題
06/15 01:42, 12F
我這邊不是說我個人的速度 是指上面全部的Java使用者的平均 VS Python使用著的平均 這幾天寫了快二十題 只看到一題是Java平均贏過Python平均 正常情況下這兩種使用者給出的平均時間複雜度應該相近 所以我才覺得這應該不會是演算法的問題 而且仔細懷想一下 這之間差距好像都蠻固定 或許真的是jvm所造成的時間差也不一定 ※ 編輯: education (59.127.173.173), 06/15/2015 07:22:47

06/15 19:50, , 13F
Java的jvm快在可以做jit,而要做jit之前,要先運行一段時間
06/15 19:50, 13F

06/15 19:51, , 14F
做profiling。你執行時間短的程式跑在JVM上面,不僅沒有jit
06/15 19:51, 14F

06/15 19:51, , 15F
優勢,還要浪費時間去啟動一個很大的JVM以及讓他做profiling
06/15 19:51, 15F

06/15 19:51, , 16F
的資源與時間。
06/15 19:51, 16F

06/15 22:31, , 17F
Java是十足的動態語言 不是原波講的靜態語言 !
06/15 22:31, 17F

06/15 22:57, , 18F
哪個平行世界的 Java?
06/15 22:57, 18F

06/15 23:36, , 19F
python沒寫好memory leak包你上線GG
06/15 23:36, 19F

06/16 05:09, , 20F
java是做動態繫節跟運行jvm花時間吧
06/16 05:09, 20F

06/16 12:44, , 21F
運行期間的安全保障機: classloader,verifier of the
06/16 12:44, 21F

06/16 12:47, , 22F
bytecode etc. 的門神機制需要花點時間 機->機制
06/16 12:47, 22F

06/26 23:03, , 23F
回s25g5d4 Java是動態語言 但其數據類型是靜態的 ok
06/26 23:03, 23F
文章代碼(AID): #1LVJCML_ (Soft_Job)
文章代碼(AID): #1LVJCML_ (Soft_Job)