处理不能完全工作的libgdx-java纹理

处理不能完全工作的libgdx-java纹理,java,libgdx,Java,Libgdx,我正在尝试完全处理资产管理器中的所有纹理,并将内存使用情况返回到开始的位置。我制作了一个非常简单的测试程序,尝试使用名为AssetManager的静态类,填充1000个纹理,然后处理所有纹理。我的目标是达到它开始时的内存使用率。当我运行这个程序时,我使用的是35兆字节。然后我单击enter填充列表,程序大约达到500兆字节。然后我点击空格清除,然后程序以65兆字节的速度运行。几乎是我开始时的两倍!下面是名为test的TestAssetManager类 public class Test

我正在尝试完全处理资产管理器中的所有纹理,并将内存使用情况返回到开始的位置。我制作了一个非常简单的测试程序,尝试使用名为AssetManager的静态类,填充1000个纹理,然后处理所有纹理。我的目标是达到它开始时的内存使用率。当我运行这个程序时,我使用的是35兆字节。然后我单击enter填充列表,程序大约达到500兆字节。然后我点击空格清除,然后程序以65兆字节的速度运行。几乎是我开始时的两倍!下面是名为test的TestAssetManager类

    public class Test {

public static Hashtable<String, Texture> textureList = new Hashtable<String, Texture>();

public static void put(String key, Texture texx){
    textureList.put(key, texx);
}

public static Texture getTexture(String key){
    return textureList.get(key);
}

public static void stressTest(int lim){
    for(int i = 0; i < lim; i++){
        textureList.put("Texture: " + i, new Texture(Gdx.files.internal("badlogic.jpg")));
    }
}
public static void destroy(String key){
    textureList.remove(key);
}

public static void dispose(){
    for(int i = 0; i < textureList.size(); i++)
        textureList.get("Texture: " + i).dispose();
    textureList.clear();
}

public static int poolSize(){
    return textureList.size();
}
公共类测试{
public static Hashtable textureList=new Hashtable();
公共静态void put(字符串键、纹理texx){
纹理列表put(键,texx);
}
公共静态纹理getTexture(字符串键){
返回textureList.get(键);
}
公共静态空隙压力试验(int lim){
对于(int i=0;i
}

这是主类的呈现方法

    if(Gdx.input.isKeyJustPressed(Keys.SPACE)){
        Test.dispose();
    }
    if(Gdx.input.isKeyJustPressed(Keys.ENTER)){
        Test.stressTest(1000);
    }
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    if(Test.poolSize() > 1)
    for(int i = 0; i < Test.poolSize(); i++){
        batch.draw(Test.getTexture("Texture: " + i), i, i, 10, 10);
    }
    batch.end();
if(Gdx.input.isKeyJustPressed(Keys.SPACE)){
Test.dispose();
}
如果(Gdx.input.isKeyJustPressed(Keys.ENTER)){
压力测试(1000);
}
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
batch.begin();
如果(Test.poolSize()>1)
对于(int i=0;i
这方面的任何帮助都是巨大的,因为我的主程序是一个挖掘游戏,你可以想象它有很多纹理。另外,请不要建议重复使用一种纹理,因为在我的主游戏中有超过1500种不同的纹理


**问题:*我如何完全处理纹理,使我的原始内存使用量达到35 MB

你是否也处理了你的批处理,我想sprite批处理是你的罪魁祸首here@KumarSaurabh我运行了程序,spritebatch也在运行,然后我加载了所有内容,然后删除了它,因此,当spritebatch运行时,它应该返回到35U,然后你应该清除spritecache,因为在spritebatch中加载大量静态内容时,尝试查看spritebatch和spritecache classI,我看不到任何实际证据表明添加的30mb是任何类型的一次性资源数据。你怎么知道你所说的是真实的,而不仅仅是在使用LibGDX/OpenGL时被“其他东西”占用的内存?我完全同意你的观点@Gimby。我要求OP做的是完全基于我的直觉和我在LIBGDX上的一点经验,这就是为什么它在评论中而不是在回答中。你是对的,我本应该用“你应该”而不是“可以”,点takendid你也处理你的批,我猜雪碧批是你的罪魁祸首here@KumarSaurabh我运行了程序,spritebatch也在运行,然后我加载了所有内容,然后删除了它,因此,当spritebatch运行时,它应该返回到35U,然后你应该清除spritecache,因为在spritebatch中加载大量静态内容时,尝试查看spritebatch和spritecache classI,我看不到任何实际证据表明添加的30mb是任何类型的一次性资源数据。你怎么知道你所说的是真实的,而不仅仅是在使用LibGDX/OpenGL时被“其他东西”占用的内存?我完全同意你的观点@Gimby。我要求OP做的是完全基于我的直觉和我在LIBGDX上的一点经验,这就是为什么它在评论中而不是在回答中。你们是对的,我本应该用“你们应该”而不是“你们应该”,这是我的观点