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项目地址:https://github.com/LWJGL/lwjgl3
LWJGL官方网站:https://www.lwjgl.org
为了讨论LWJGL在内存分配方面的设计,我将会使用数篇随笔分开介绍,目录如下
LWJGL3的内存管理,第四篇,DEBUG工具(编写中)
LWJGL3的内存管理,第五篇,Project Panama(编写中)
LWJGL3的内存管理的更多相关文章
- LWJGL3的内存管理,简介及目录
LWJGL3的内存管理,简介及目录 LWJGL3 (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java ...
- LWJGL3的内存管理,第一篇,基础知识
LWJGL3的内存管理,第一篇,基础知识 为了讨论LWJGL在内存分配方面的设计,我将会分为数篇随笔分开介绍,本篇将主要介绍一些大方向的问题和一些必备的知识. 何为"绑定(binding)& ...
- LWJGL3的内存管理,第二篇,栈上分配
LWJGL3的内存管理,第二篇,栈上分配 简介 为了讨论LWJGL在内存分配方面的设计,本文将作为该系列随笔中的第二篇,用来讨论在栈上进行内存分配的策略,该策略在 LWJGL3 中体现为以 Memor ...
- LWJGL3的内存管理,第三篇,剩下的两种策略
LWJGL3的内存管理,第三篇,剩下的两种策略 上一篇讨论的基于 MemoryStack 类的栈上分配方式,是效率最高的,但是有些情况下无法使用.比如需要分配的内存较大,又或许生命周期较长.这时候就可 ...
- 【LWJGL3】LWJGL3的内存分配设计,第一篇,栈上分配
简介 LWJGL (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java绑定库.<我的世界> ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- PHP扩展-生命周期和内存管理
1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...
- linux2.6 内存管理——逻辑地址转换为线性地址(逻辑地址、线性地址、物理地址、虚拟地址)
Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Linux运行在虚拟存储空间,并负责把系 ...
- linux2.6 内存管理——概述
在紧接着相当长的篇幅中,都是围绕着Linux如何管理内存进行阐述,在内核中分配内存并不是一件非常容易的事情,因为在此过程中必须遵从内核特定的状态约束.linux内存管理建立在基本的分页机制基础上,在l ...
随机推荐
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
- spring-boot-route(五)整合Swagger生成接口文档
目前,大多数公司都采用了前后端分离的开发模式,为了解决前后端人员的沟通问题,后端人员在开发接口的时候会选择使用swagger2来生成对应的接口文档,swagger2提供了强大的页面调试功能,这样可以有 ...
- C# 中的延时的方法。
转载:https://blog.csdn.net/caixiexin/article/details/5769121 System.Threading.Thread.Sleep(2000); 其中20 ...
- DOS批处理中%cd%与%~dp0的区别详解
转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解 Windows下批处理中%cd%和%~dp0都能用来表示当前 ...
- 【题解】[USACO12JAN]Video Game G
第一道\(AC\)自动机\(+DP.\) 首先,一个自动机上\(DP\)的套路是设\(dp[i][j]\)表示长度为\(i\)匹配到\(j\)节点的最优得分. 那么,由于我们已经建好了\(Trie\) ...
- tomcat 验证码显示问题
在Web开发中使用验证码时可能遇到的问题:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsE ...
- Springboot+Redis(发布订阅模式)跨多服务器实战
一:redis中发布订阅功能(http://www.redis.cn/commands.html#pubsub) PSUBSCRIBE pattern [pattern -]:订阅一个或者多个符合pa ...
- Verilog基础入门——Vivado流水灯工程(四)(实验报告)
今日进行了数字逻辑实验,完成了一个最简单的FPGA设计,即流水灯设计. 此处记录我们的指导文件以及实验报告,同时记录遇到的问题及解决方法. 一.vivado工程源文件编写 counter.v文件 `t ...
- boost之asio
asio asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>. ip地址 boost定义了表示ip ...
- keccak和sha3的区别
keccak应用 在以太坊中,用keccak哈希算法来计算公钥的256位哈希,再截取这256位哈希的后160位哈希作为地址值. keccak和sha3的区别 sha3由keccak标准化而来,在很多场 ...