allocatedirect请教个GLSL多重纹理的问题

allocatedirect  时间:2021-06-08  阅读:()

使用直接缓冲区是非直接缓冲区的多长时间

直接缓存区是在虚拟机内存外,开辟的内存,IO操作直接进行,不再对其进行复制,但创建和销毁开销大 非直e799bee5baa6e79fa5e98193e58685e5aeb931333363376431接缓存区在虚拟机内存中创建,易回收,但占用虚拟机内存开销,处理中有复制过程(见非直接缓冲区写入步骤) 非直接缓冲区写入步骤: 1.创建一个临时的直接ByteBuffer对象。

2.将非直接缓冲区的内容复制到临时缓冲中。

3.使用临时缓冲区执行低层次I/O操作。

4.临时缓冲区对象离开作用域,并最终成为被回收的无用数据。

如果采用直接缓冲区会少一次复制过程,如果需要循环使用缓冲区,用直接缓冲区可以很大地提高性能。

虽然直接缓冲区使JVM可以进行高效的I/o操作,但它使用的内存是操作系统分配的,绕过了JVM堆栈,建立和销毁比堆栈上的缓冲区要更大的开销。

Java API解释: 直接与 非直接缓冲区 字节缓冲区要么是直接的,要么是非直接的。

如果为直接字节缓冲区,则 Java 虚拟机会尽最大努力直接在此缓冲区上执行本机 I/O 操作。

也就是说,在每次调用基础操作系统的一个本机 I/O 操作之前(或之后),虚拟机都会尽量避免将缓冲区的内容复制到中间缓冲区中(或从中间缓冲区中复制内容)。

直接字节缓冲区可以通过调用此类的allocateDirect 工厂方法来创建。

此方法返回的缓冲区进行分配和取消分配所需成本通常高于非直接缓冲区。

直接缓冲区的内容可以驻留在常规的垃圾回收堆之外,因此,它们对应用程序的内存需求量造成的影响可能并不明显。

所以,建议将直接缓冲区主要分配给那些易受基础系统的本机 I/O 操作影响的大型、持久的缓冲区。

一般情况下,最好仅在直接缓冲区能在程序性能方面带来明显好处时分配它们。

直接字节缓冲区还可以通过 mapping 将文件区域直接映射到内存中来创建。

Java 平台的实现有助于通过 JNI 从本机代码创建直接字节缓冲区。

如果以上这些缓冲区中的某个缓冲区实例指的是不可访问的内存区域,则试图访问该区域不会更改该缓冲区的内容,并且将会在访问期间或稍后的某个时间导致抛出不确定的异常。

字节缓冲区是直接缓冲区还是非直接缓冲区可通过调用其 isDirect 方法来确定。

提供此方法是为了能够在性能关键型代码中执行显式缓冲区管理。

java 中,直接缓冲区与非直接缓冲器有什么区别

直接缓冲区:通过allocate()分配缓冲区:通过allocateDirect()分配直接缓冲区,将缓冲区建立在JVM的内存中 直接缓冲区,将缓冲区建立在物理内存中,可以提高效率

想换个显卡: 显存1600左右 GDDR3 内存条4G或者8G的 主板还有声卡 处理器是AMD 64X2的 该怎么搭配,求大神指教 经济又实用的

AMD速龙64×2系列CPU是AM2接口,内置双通道DDR2内存控制器,不可以搭配只提供DDR3内存插槽的AM3/AM3+主板,也不可以使用DDR3内存。

如果你目前缺少主板(集成声卡、网卡,可能集成显卡)、内存、显卡,那么不要折腾了,把CPU及其他硬件(比如硬盘等),都二手处理掉吧,,考虑组装一台AMD的AM3/AM3+、FM2或者Intel的LGA1155平台主机。

求问Java怎样查看系统物理内存大小?还有可用内存

我来解释一下你遇到的不解: 你所看到的现象也是真的。

之所以RunTime的函数报告的内存与你看到的不一样是因为java运行是以虚拟机为单位。

她报告的都是虚拟机的情况。

而在一个windows系统里,你可以启动安装多个虚拟机。

而每个虚拟机在启动的时候,并不能得到windows系统的全部资源,jvm的资源也由windows来分配。

windows所掌管的就是你硬件上的256M, 而jvm得到的仅是部分。

但对于运行在jvm里的java程序,当然只探测jvm的资源情况。

如果你非要让java程序跑到jvm之外的环境去探测实际硬件环境,那就只有native code了。

我晕~~还是不对啊我运行的结果和你的一模一样 可我的内存是256M的而且可用内存肯定不对(不可能只有1M多)

请教个GLSL多重纹理的问题

);   编写Manifest文件   如果你想要发布你的App到谷歌商店,在AndroidManifest.xml文件中添加如下语句:     这会确保你的app只能被安装在支持OpenGL ES2.0的设备之上。

现在OpenGL环境准备完毕。

  创建一个OpenGL平面   定义顶点   GLSurfaceView是不能直接显示一张照片的,照片首先应该被转化为纹理,应用在OpenGL square之上。

在本次教程中,我将创建一个2D平面,并且具有4个顶点。

为了简单,我将使用一个长方形,现在,创建一个新的类Square,用它来代表形状。

  public class Square {}  默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:   左下角: (-1, -1) 右下角:(1, -1) 右上角:(1, 1) 左上角:(-1, 1)   我们使用OpenGL绘制的所有的物体都应该是由三角形决定的,为了画一个方形,我们需要两个具有一条公共边的三角形,那意味着这些三角形的坐标应该是:   triangle 1: (-1, -1), (1, -1), 和 (-1, 1) triangle 2: (1, -1), (-1, 1), 和 (1, 1)   创建一个float数组来代表这些顶点:   private float vertices[] = { -1f, -1f, 1f, -1f, -1f, 1f, 1f, 1f,};  为了在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:   private float textureVertices[] = { 0f,1f, 1f,1f, 0f,0f, 1f,0f};  创建缓冲区   这些坐标数组应该被转变为缓冲字符(byte buffer)在OpenGL可以使用之前,接下来进行定义:   private FloatBuffer verticesBuffer;private FloatBuffer textureBuffer;  在initializeBuffers方法中去初始化这些缓冲区:使用ByteBuffer.allocateDirect来创建缓冲区,因为float是4个字节,那么我们需要的byte数组的长度应该为float的4倍。

  下面使用ByteBuffer.nativeOrder方法来定义在底层的本地平台上的byte的顺序。

使用asFloatBuffer方法将ByteBuffer转化为FloatBuffer,在FloatBuffer被创建后,我们调用put方法来将float数组放入缓冲区,最后,调用position方法来保证我们是由缓冲区的开头进行读取。

  private void initializeBuffers(){ ByteBuffer buff = ByteBuffer.allocateDirect(vertices.length * 4); buff.order(ByteOrder.nativeOrder()); verticesBuffer = buff.asFloatBuffer(); verticesBuffer.put(vertices); verticesBuffer.position(0); buff = ByteBuffer.allocateDirect(textureVertices.length * 4); buff.order(ByteOrder.nativeOrder()); textureBuffer = buff.asFloatBuffer(); textureBuffer.put(textureVertices); textureBuffer.position(0);}  创建着色器   着色器只不过是简单的运行在GPU中的每个单独的顶点的C程序,在本次教程中,我们使用两种着色器:顶点着色器和片段着色器。

  顶点着色器的代码:   attribute vec4 aPosition; attribute vec2 aTexPosition; varying vec2 vTexPosition; void main() { gl_Position = aPosition; vTexPosition = aTexPosition; };  片段着色器的代码   precision mediump float; uniform. sampler2D uTexture; varying vec2 vTexPosition; void main() { gl_FragColor = texture2D(uTexture, vTexPosition); };  如果你了解OpenGL,那么这段代码对你来说是熟悉的,如果你不能理解这段代码,你可以参考OpenGL documentation。

Sharktech云服务器35折年付33美元起,2G内存/40G硬盘/4TB流量/多机房可选

Sharktech又称SK或者鲨鱼机房,是一家主打高防产品的国外商家,成立于2003年,提供的产品包括独立服务器租用、VPS云服务器等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等。之前我们经常分享商家提供的独立服务器产品,近期主机商针对云虚拟服务器(CVS)提供优惠码,优惠后XS套餐年付最低仅33.39美元起,支持使用支付宝、PayPal、信用卡等付款方式。下面以XS套餐为例,分享产品配...

tmhhost:全场VPS低至6.4折,香港BGP200M日本软银美国cn2 gia 200G高防美国三网cn2 gia韩国CN2

tmhhost放出了2021年的端午佳节+618年中大促的优惠活动:日本软银、洛杉矶200G高防cn2 gia、洛杉矶三网cn2 gia、香港200M直连BGP、韩国cn2,全都是高端优化线路,所有这些VPS直接8折,部分已经做了季付8折然后再在此基础上继续8折(也就是6.4折)。 官方网站:https://www.tmhhost.com 香港BGP线路VPS ,200M带宽 200M带...

DiyVM:香港VPS五折月付50元起,2核/2G内存/50G硬盘/2M带宽/CN2线路

diyvm怎么样?diyvm这是一家低调国人VPS主机商,成立于2009年,提供的产品包括VPS主机和独立服务器租用等,数据中心包括香港沙田、美国洛杉矶、日本大阪等,VPS主机基于XEN架构,均为国内直连线路,主机支持异地备份与自定义镜像,可提供内网IP。最近,DiyVM商家对香港机房VPS提供5折优惠码,最低2GB内存起优惠后仅需50元/月。点击进入:diyvm官方网站地址DiyVM香港机房CN...

allocatedirect为你推荐
scheduleatfixedrate定时任务中的 Timer的schedule和scheduleAtFixedRate方法的区别?迅雷地址转换下载地址转换 怎么把别人的资源转换成迅雷地址 并且下载文件名改成自己想要的名字视频压缩算法MP4视频压缩,比特率如何计算。qq网络硬盘如何使用QQ网络硬盘数据统计分析表怎样建立数据透视表和数据分析表?遗传算法实例如何用C语言实现遗传算法的实际应用?天翼校园宽带中国电信校园宽带怎么样?什么是生态系统生态系统的功能有什么?微信智能机器人有没有可以拉进微信群的聊天机器人papertiger亚瑟士 艾斯克斯 tiger有什么区别吗
网通vps 万网域名证书查询 qq云存储 iis安装教程 免费个人博客 国外php空间 免费ddos防火墙 qq数据库 web服务器架设 老左来了 腾讯总部在哪 英国伦敦 国外在线代理服务器 秒杀品 主机返佣 网站加速 阿里云邮箱个人版 深圳主机托管 免费赚q币 学生机 更多