LWJGL3的記憶體管理,簡介及目錄
LWJGL3的記憶體管理,簡介及目錄
LWJGL3 (Lightweight Java Game Library 3),是一個支援OpenGL,OpenAl,Opengl ES,Vulkan等的Java綁定庫。《Minecraft》便是基於LWJGL的作品。Java1.4發佈於2002年初,而 LWJGL 創建於幾個月之後。這並非巧合,而是隨著Java1.4發布的NIO庫,終於使得直接而高效地操作堆外記憶體成為了可能。不需要使用堆內緩衝區就能從堆外記憶體讀寫數據,減少了數據拷貝帶來的性能消耗。
LWJGL3 作為一個底層圖形庫,天然要追求高性能。為此提供了三種記憶體分配策略,性能從高到低分別為:
- 基於 MemoryStack 的棧上分配方式
- 基於 JNI 調用 jemalloc 等第三方庫的記憶體分配技術
- JDK 提供的 ByteBuffer.allocateDirect
要想基於 LWJGL3 構建自己的應用,則只有在了解了這三種分配策略之後,才能運用自如不會感到困惑。LWJGL3這種庫的實現需要考慮的問題相當底層,此外實現背後的設計本身也具有很高的參考價值,項目的作者spasi持續開發和維護了該項目接近二十年,其編碼和設計水平值得深入學習。
LWJGL項目地址://github.com/LWJGL/lwjgl3
LWJGL官方網站://www.lwjgl.org
為了討論LWJGL在記憶體分配方面的設計,我將會使用數篇隨筆分開介紹,目錄如下
LWJGL3的記憶體管理,第四篇,DEBUG工具(編寫中)
LWJGL3的記憶體管理,第五篇,Project Panama(編寫中)