gpt4 book ai didi

java - ByteBuffer allocateDirect 花费了很长时间

转载 作者:行者123 更新时间:2023-12-01 15:41:28 25 4
gpt4 key购买 nike

我使用浮点缓冲区作为 Android 中 opengl 绘图所需的直接字节缓冲区。问题是,在创建字节缓冲区时,GC 会变得疯狂——就像 30 多秒一样疯狂。我正在创建一个 40x40 顶点、1600 个顶点或 4800 个浮点的网格。根据探查器,调用 GC 的罪魁祸首是 ByteBuffer.allocateDirect。

对于创建这种尺寸的网格来说,这是正常的还是预期的?看起来很温顺。

缓冲区 init() 代码如下:

public static FloatBuffer createFloatBuffer(int capacity) {
ByteBuffer vbb = ByteBuffer.allocateDirect(capacity * 4);
vbb.order(ByteOrder.nativeOrder());
return vbb.asFloatBuffer();
}

最佳答案

你的问题说allocateDirect,但你的代码说allocate。你用的是哪个?

已知 allocateDirect 会调用 System.gc,尝试在尝试(但失败)分配新的直接字节缓冲区之前强制回收 DirectByteBuffer。

参见this answer一个关于避免 GC 的建议。或者,您可以尝试创建一个适当大小的 DirectByteBuffer 池,而不是不断创建新的。

关于java - ByteBuffer allocateDirect 花费了很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7982696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com