Re: [請益] java的效能!?

看板Soft_Job作者 (Who cares?)時間13年前 (2011/05/26 00:35), 編輯推噓0(0027)
留言27則, 2人參與, 最新討論串49/52 (看更多)
※ 引述《sniffer (again)》之銘言: : GC 把記憶體物件化, 其實很容易平行處理, 甚至專門有硬體來進行 GC, : 所以 GC 在實做上可以視為幾乎沒有效能代價, 卻有重大方便, 不用開發人員去寫code操心是一回事, 拿native code debugger去看GC thread又是另一回事, 方便是方便啦,我沒辦法同意GC可以視為幾乎沒有效能代價這回事。 : IL 跟 java 根本是一樣的 stack machine, 你比較的只是 M$ 跟某些 Java 廠商的 : compiler, 而不是兩種技術的優劣, : M$ compiler 好不好, 看 WM 跟 android 比較就知道, 不多說 這我倒是疑惑了,如果不比較這兩個平台的實作與其compiler/JIT所產生出來的code, 那要比什麼?我同意gcc有些地方最佳化可以做得比VC++好,不過我不同意Java各版本 的JIT生出來的X86 code的最佳化有普遍勝過.NET的JIT。 : 先 compile 一份 native code 就會拖慢安裝時間, 還會占好幾倍空間, : browser 明顯不太適用, 說不定 user 一輩子只用一次這程式, : 而 java 也一樣有先 compile 的作法存在, 只是手機記憶體有限, : 所以沒有人使用這個方法, 光 byte code 就塞不夠了還管 native code, : 尤其 RISC 的 native code 一般是 x86 兩倍大 在以後,這些問題會愈來愈小,RAM成本降很快,flash memory也是。 佔空間在PC上已經不是問題了,在手持裝置上也會愈來愈不是問題。 : 離線最佳化一定比不過即時, 沒跑過怎知道哪個變數才是熱點, : 哪一種作法好, 只是執行效能跟 compile/profile 代價的數字遊戲 如果你的CPU暫存器數與記憶體充足的情況下,你會擔心哪裡才是熱點嗎? 即使是在64-bit X86的環境下,都常常可見大量運用暫存器來傳變數了。 在整天都在看反組譯後的機械碼的我來看, 我實在看不出來「離線最佳化一定比不過即時」這說法在最終被執行的原生碼層次 的效能上如何能成立;當然兩邊要付出的代價不同,考量也會不一樣。 : : 要不要把GPU與其他平行處理單元再考慮進來? : GPU 的 code 都是 JIT 的, 除非你綁死某一款 GPU, 不然準備幾十種 precompile 太誇張 只有某個層次以上是JIT的,而且指令集的差異也沒有到幾十種的程度, 架構上世代變革造成的指令集不相容沒有那麼頻繁發生; 不過那是外界所碰觸不到的地盤了,也不是我前文想說的事。 Java眾所皆知的,做VM的就那麼幾家,然後所謂新VM功能與新API的成形都是透過JSR 先提出來。比起來,.NET是M$說了就算數,以LINQ與lambda expression來說,都很有 希望在之後的某個時間點被加上丟去GPU跑的功能;以M$與三大家CPU/GPU廠商的合作 關係,那是彼此開開會就可以決定是不是要透過現有的API或另開新API出來做這事。 我真的不知道做Java VM各家公司哪天才能統一出一個介面,與各CPU/GPU廠商溝通好 一個統一管道來做些平行處理的事。也許很有希望透過Open CL來做啦,不過還不知道 要等到哪天,想玩的人大概都自己透過JNI先行了。Java在這方面一定是最慢跟上的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.10.18

05/26 01:44, , 1F
還平行處理? 有幾件事是可以parallel process 的
05/26 01:44, 1F

05/26 07:04, , 2F
我會認為平行處理做到某程度以上就不能單純依靠演算法.
05/26 07:04, 2F

05/26 07:05, , 3F
執行碼只要來個cache miss甚至在不合時機的情況下進行
05/26 07:05, 3F

05/26 07:06, , 4F
context switch就已經會產生相對巨大的time loss, JVM
05/26 07:06, 4F

05/26 07:07, , 5F
為了跨平台, 在比較單一平台的runtime時會出現劣勢是
05/26 07:07, 5F

05/26 07:10, , 6F
顯而易見的. 而且在WinXP退出支援cycle (也就是當所有
05/26 07:10, 6F

05/26 07:11, , 7F
目前支援版本的Windows都支援那些新的平行運算相關的
05/26 07:11, 7F

05/26 07:11, , 8F
API的時候), 執行效能的先天差距將會擴大...
05/26 07:11, 8F

05/26 12:15, , 9F
你只是想一下,intel 的hyperthread搞多久了,有搞頭嗎?
05/26 12:15, 9F

05/26 20:30, , 10F
hyperthread和真core是兩回事啊... 而且當年的HT只是
05/26 20:30, 10F

05/26 20:32, , 11F
算兩core, 未來為了抵銷速度升率的下降, 只會不斷推出
05/26 20:32, 11F

05/26 20:33, , 12F
更多核的CPU吧... 如何善用這些core, 或者如何避免因為
05/26 20:33, 12F

05/26 20:34, , 13F
不當的context switch導致效能急降, 會是相當重要的
05/26 20:34, 13F

05/26 20:34, , 14F
課題...
05/26 20:34, 14F

05/26 22:15, , 15F
看來你是真的不知intel 為了multicore 下了多少功夫
05/26 22:15, 15F

05/26 22:15, , 16F
還在很high 的自己為是先進人事
05/26 22:15, 16F

05/27 19:56, , 17F
我沒認為自己是先進人事, 也沒批評甚麼的, 只是單純地
05/27 19:56, 17F

05/27 19:57, , 18F
說出我的看法, 不明白你這是怎麼回事...
05/27 19:57, 18F

05/27 20:02, , 19F
至於我在這樣說的原因, 請看TheOldNewThings中關於
05/27 20:02, 19F

05/27 20:03, , 20F
Interlocked*那數篇討論...
05/27 20:03, 20F

05/27 20:45, , 21F
簡單的講就是, 不用你講, intel也幹了快10年了,
05/27 20:45, 21F

05/27 20:46, , 22F
多核的發展在軟體上就沒發生什麼大不了的事.
05/27 20:46, 22F

05/27 20:47, , 23F
就是我說的,沒幾件事可以平行處理.
05/27 20:47, 23F

05/28 08:20, , 24F
我沒認為你說的有錯哦, 有看清楚的話, 我的第一部份推文
05/28 08:20, 24F

05/28 08:21, , 25F
根本不是回應你所說的.
05/28 08:21, 25F

05/28 08:23, , 26F
只是沒想開一篇新文, 回第一篇隔了這麼多頁沒意思, 就
05/28 08:23, 26F

05/28 08:23, , 27F
隨手貼在這了...
05/28 08:23, 27F
文章代碼(AID): #1DtI_HZJ (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1DtI_HZJ (Soft_Job)