中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java緩沖區類型與原生數組哪個垃圾回收更快

發布時間:2021-07-12 13:48:42 來源:億速云 閱讀:199 作者:chen 欄目:云計算

這篇文章主要介紹“Java緩沖區類型與原生數組哪個垃圾回收更快”,在日常操作中,相信很多人在Java緩沖區類型與原生數組哪個垃圾回收更快問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java緩沖區類型與原生數組哪個垃圾回收更快”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

使用 C 語言開發時,必須手動分配和釋放內存,這是一個容易出錯的過程。相反,像 Java 這樣的之后的一些語言通常會自動管理內存。Java 依賴于垃圾回收。實際上,內存是根據需要來分配,然后 Java 發現哪些數據不再訪問,并回收相應的內存。垃圾回收過程既快速又安全,但是它不是免費的:盡管進行了數十年的優化,但它仍然可能給開發人員帶來一些麻煩。

Java 具有原生數組(例如 int[] 類型),這些數組通常在 Java 堆上分配。也就是說,它們由 Java 作為動態數據進行分配和管理,并進行垃圾回收。

Java 還具有 Buffer 類型,如 IntBuffer,它是一種高級抽象,可以由原生 Java 數組實現,也可以由其他數據源(包括 Java 堆外數據)來實現。因此,可以使用 Buffer 類型來避免過多地依賴 Java 堆。

與原生數組相比,Buffer 會存在一定性能損失。我不是說 Buffer 慢。事實上,如果在 Buffer 和流(DataInputStream)之間做一個選擇,你應該更傾向于 Buffer 類型。然而,根據我的經驗,Buffer 在性能方面不如原生數組。

我可以用 new int[50000] 或 IntBuffer.allocate(50000) 來創建一個包含 50,000 個整數的數組。后者本質上應該是創建一個數組(在 Java 堆上),然后用 IntBuffer 接口來包裝。

一個可能的直覺是,用高級接口包裝一個數組應該是免費的。雖然高層次的抽象確實可以不帶來性能上的損失(有時甚至可以帶來性能上的提升),但是否會帶來性能上的提升是一個經驗問題。你絕對不應該只是假設你的抽象是免費得來的。

因為我在做一個經驗陳述,但我可以用最簡單的測試來證明它,比如給數組 以及 IntBuffer 中的每個元素加 1。

for(int k = 0; k  < s.array.length; k++) {     s.array[k] += 1;}
for(int k = 0; k  < s.buffer.limit(); k++) {     s.buffer.put(k, s.buffer.get(k) + 1);}

我在臺式機(OpenJDK 14,4.2 GHz Intel 處理器)上得到結果如下:

Java緩沖區類型與原生數組哪個垃圾回收更快

也就是說,在此測試中,數組比 IntBuffers 快 4 倍以上。

如果有興趣,你也可以自己運行以下基準測試。

https://github.com/lemire/Code-used-on-Daniel-Lemire-s-blog/tree/master/2020/11/30

我的看法是,Java 針對數組的許多優化不適用于 Buffer 類型。

當然,我們無法得知 Buffer 從 Java 堆外映射時發生了什么,根據我的經驗,情況可能很糟。

Buffer 類型并不會讓原生數組過時,至少在性能方面。

到此,關于“Java緩沖區類型與原生數組哪個垃圾回收更快”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江西省| 甘孜| 五指山市| 巫山县| 聂拉木县| 苏尼特右旗| 黄梅县| 鹿邑县| 济阳县| 安阳市| 珲春市| 荃湾区| 正安县| 卓资县| 聂荣县| 金乡县| 大厂| 松滋市| 察隅县| 营山县| 阿坝| 邹平县| 鲁山县| 德江县| 瓮安县| 喀喇| 崇文区| 临沭县| 彭水| 平顺县| 克山县| 镶黄旗| 拉孜县| 陇南市| 北海市| 洛浦县| 萨嘎县| 翁源县| 广灵县| 武定县| 社旗县|