LWJGL3的記憶體管理,簡介及目錄

LWJGL3的記憶體管理,簡介及目錄

LWJGL3 (Lightweight Java Game Library 3),是一個支援OpenGL,OpenAl,Opengl ES,Vulkan等的Java綁定庫。《Minecraft》便是基於LWJGL的作品。Java1.4發佈於2002年初,而 LWJGL 創建於幾個月之後。這並非巧合,而是隨著Java1.4發布的NIO庫,終於使得直接而高效地操作堆外記憶體成為了可能。不需要使用堆內緩衝區就能從堆外記憶體讀寫數據,減少了數據拷貝帶來的性能消耗。

LWJGL3 作為一個底層圖形庫,天然要追求高性能。為此提供了三種記憶體分配策略,性能從高到低分別為:

  1. 基於 MemoryStack 的棧上分配方式
  2. 基於 JNI 調用 jemalloc 等第三方庫的記憶體分配技術
  3. JDK 提供的 ByteBuffer.allocateDirect

要想基於 LWJGL3 構建自己的應用,則只有在了解了這三種分配策略之後,才能運用自如不會感到困惑。LWJGL3這種庫的實現需要考慮的問題相當底層,此外實現背後的設計本身也具有很高的參考價值,項目的作者spasi持續開發和維護了該項目接近二十年,其編碼和設計水平值得深入學習。

LWJGL項目地址://github.com/LWJGL/lwjgl3
LWJGL官方網站://www.lwjgl.org

為了討論LWJGL在記憶體分配方面的設計,我將會使用數篇隨筆分開介紹,目錄如下

LWJGL3的記憶體管理,第一篇,基礎知識

LWJGL3的記憶體管理,第二篇,棧上分配

LWJGL3的記憶體管理,第三篇,剩下的兩種策略

LWJGL3的記憶體管理,第四篇,DEBUG工具(編寫中)

LWJGL3的記憶體管理,第五篇,Project Panama(編寫中)