Java OutOfMemoryError Direct Buffer Memory – Java 147

Java OutOfMemoryError Direct Buffer Memory,當使用 NIO 的時候經常需要使用 ByteBuffer 來讀取或寫入數據,這是一種基於 Channel (通道) 和 Buffer (緩衝區)的 I/O 方式,它可以使用 Native 函數庫直接分配堆外內存,然後通過一個存儲在 Java 堆裡面的 DirectByteBuffer 對像作為這塊內存的引用進行操作,這樣在一些場景就避免了 Java 堆和 Native 中來回複製數據,所以性能會有所提高, Java 允許應用程序通過 Direct ByteBuffer 直接訪問堆外內存,許多高性能程序通過 Direct ByteBuffer 結合內存映射文件(Memory Mapped File)實現高速 IO。

Continue ReadingJava OutOfMemoryError Direct Buffer Memory – Java 147

Java OutOfMemoryError Requested Array Size Exceeds VM Limit – Java 147

Requested Array Size Exceeds VM Limit 建立 Array 時,超過 VM 陣列大小上限,JVM 會在分配的資料結構上,會執行一項檢查,確定是否可以 Addressable 尋址,可分配大小為 2,147,483,645,及 Integer.MAX_VALUE-2 的陣列,若增加一點點長度,如: Integer.MAX_VALUE-1 就會拋出此錯誤, Java 147 增加了範例,並透過 JUnit 4 來驗證產出結果。

Continue ReadingJava OutOfMemoryError Requested Array Size Exceeds VM Limit – Java 147

Java Primitive Type Stream Boxed – Java 147

Java Primitive Type Stream Boxed 提供 Primitive Stream 轉換成 Object Stream ,支援 Stream 排序、並行處理、聚合操作等,可以避免大量不必要的物件建立,節省系統資源,本篇增加了範例,並透過 JUnit 4 來驗證產出結果。

Continue ReadingJava Primitive Type Stream Boxed – Java 147