日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java数组缓冲_java – 何时使用数组,缓冲区或直接缓冲区

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数组缓冲_java – 何时使用数组,缓冲区或直接缓冲区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在編寫用于OpenGL庫的Matrix類時,我遇到了使用Java數組或Buffer策略來存儲數據的問題(JOGL為Matrix操作提供直接緩沖區副本)。為了分析這一點,我寫了一個小型性能測試程序,比較了陣列與緩沖區與直接緩沖區之間的循環和批量操作的相對速度。

我想在這里分享我的結果(因為我覺得他們很有趣)。請隨意評論和/或指出任何錯誤。

代碼可以在pastebin.com/is7UaiMV查看。

筆記

>循環讀取數組實現為A [i] = B [i],否則JIT優化器將完全刪除該代碼。實際的var = A [i]似乎幾乎相同。

>在數組大小為10,000的示例結果中,JIT優化器很可能已經用像System.arraycopy一樣的實現替代了循環的數組訪問。

>由于Java將A.get(B)作為B.put(A)實現,因此沒有批量獲取緩沖區 – >緩沖區,因此結果將與批量輸出結果相同。

結論

在幾乎所有情況下,強烈建議使用Java內部數組。投入/獲取速度不僅速度更快,所以JIT能夠對最終代碼進行更好的優化。

只有在以下兩種情況下才應使用緩沖區:

>您需要處理大量的數據。

>數據大部分或總是經過批量處理。

請注意,一個備份緩沖區有一個Java Array來緩沖緩沖區的內容。建議在這個back-buffer上進行操作,而不是循環put / get。

只有當您擔心內存使用并且從不訪問底層數據時,才應使用直接緩沖區。它們比非直接緩沖區慢一點,如果訪問底層數據,則使用較少的內存。此外,當使用直接緩沖區時,將非字節數據(如浮點數組)轉換為字節時,還需要額外的開銷。

詳情請見:

示例結果

注意:百分比只是為了便于閱讀,沒有真正的意義。

使用大小為16的數組與10,000,000次迭代…

-- Array tests: -----------------------------------------

Loop-write array: 87.29 ms 11,52%

Arrays.fill: 64.51 ms 8,51%

Loop-read array: 42.11 ms 5,56%

System.arraycopy: 47.25 ms 6,23%

-- Buffer tests: ----------------------------------------

Loop-put buffer: 603.71 ms 79,65%

Index-put buffer: 536.05 ms 70,72%

Bulk-put array->buffer: 105.43 ms 13,91%

Bulk-put buffer->buffer: 99.09 ms 13,07%

Bulk-put bufferD->buffer: 80.38 ms 10,60%

Loop-get buffer: 505.77 ms 66,73%

Index-get buffer: 562.84 ms 74,26%

Bulk-get buffer->array: 137.86 ms 18,19%

-- Direct buffer tests: ---------------------------------

Loop-put bufferD: 570.69 ms 75,29%

Index-put bufferD: 562.76 ms 74,25%

Bulk-put array->bufferD: 712.16 ms 93,96%

Bulk-put buffer->bufferD: 83.53 ms 11,02%

Bulk-put bufferD->bufferD: 118.00 ms 15,57%

Loop-get bufferD: 528.62 ms 69,74%

Index-get bufferD: 560.36 ms 73,93%

Bulk-get bufferD->array: 757.95 ms 100,00%

使用大小為1,000的數組,重復100,000次…

-- Array tests: -----------------------------------------

Loop-write array: 22.10 ms 6,21%

Arrays.fill: 10.37 ms 2,91%

Loop-read array: 81.12 ms 22,79%

System.arraycopy: 10.59 ms 2,97%

-- Buffer tests: ----------------------------------------

Loop-put buffer: 355.98 ms 100,00%

Index-put buffer: 353.80 ms 99,39%

Bulk-put array->buffer: 16.33 ms 4,59%

Bulk-put buffer->buffer: 5.40 ms 1,52%

Bulk-put bufferD->buffer: 4.95 ms 1,39%

Loop-get buffer: 299.95 ms 84,26%

Index-get buffer: 343.05 ms 96,37%

Bulk-get buffer->array: 15.94 ms 4,48%

-- Direct buffer tests: ---------------------------------

Loop-put bufferD: 355.11 ms 99,75%

Index-put bufferD: 348.63 ms 97,93%

Bulk-put array->bufferD: 190.86 ms 53,61%

Bulk-put buffer->bufferD: 5.60 ms 1,57%

Bulk-put bufferD->bufferD: 7.73 ms 2,17%

Loop-get bufferD: 344.10 ms 96,66%

Index-get bufferD: 333.03 ms 93,55%

Bulk-get bufferD->array: 190.12 ms 53,41%

使用大小為10,000的數組,重復100,000次…

-- Array tests: -----------------------------------------

Loop-write array: 156.02 ms 4,37%

Arrays.fill: 109.06 ms 3,06%

Loop-read array: 300.45 ms 8,42%

System.arraycopy: 147.36 ms 4,13%

-- Buffer tests: ----------------------------------------

Loop-put buffer: 3385.94 ms 94,89%

Index-put buffer: 3568.43 ms 100,00%

Bulk-put array->buffer: 159.40 ms 4,47%

Bulk-put buffer->buffer: 5.31 ms 0,15%

Bulk-put bufferD->buffer: 6.61 ms 0,19%

Loop-get buffer: 2907.21 ms 81,47%

Index-get buffer: 3413.56 ms 95,66%

Bulk-get buffer->array: 177.31 ms 4,97%

-- Direct buffer tests: ---------------------------------

Loop-put bufferD: 3319.25 ms 93,02%

Index-put bufferD: 3538.16 ms 99,15%

Bulk-put array->bufferD: 1849.45 ms 51,83%

Bulk-put buffer->bufferD: 5.60 ms 0,16%

Bulk-put bufferD->bufferD: 7.63 ms 0,21%

Loop-get bufferD: 3227.26 ms 90,44%

Index-get bufferD: 3413.94 ms 95,67%

Bulk-get bufferD->array: 1848.24 ms 51,79%

總結

以上是生活随笔為你收集整理的java数组缓冲_java – 何时使用数组,缓冲区或直接缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。