Out of memory error when load image via http URL

I load a Texture using assetManager to load image at certain url,

However the following are error that I recieve





E/dalvikvm-heap( 1832): Out of memory on a 1728016-byte allocation.

I/dalvikvm( 1832): “pool-1-thread-3” prio=5 tid=14 RUNNABLE

I/dalvikvm( 1832): | group=“main” sCount=0 dsCount=0 obj=0x40c07468 self=0x24b340

I/dalvikvm( 1832): | sysTid=1845 nice=0 sched=0/0 cgrp=default handle=2115176

I/dalvikvm( 1832): | schedstat=( 897960000 81161000 1225 ) utm=87 stm=2 core=0

I/dalvikvm( 1832): at android.graphics.Bitmap.nativeCreate(Native Method)

I/dalvikvm( 1832): at android.graphics.Bitmap.createBitmap(Bitmap.java:604)

I/dalvikvm( 1832): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)

I/dalvikvm( 1832): at com.jme3.asset.AndroidImageInfo.loadBitmap(AndroidImageInfo.java:92)

I/dalvikvm( 1832): at com.jme3.asset.AndroidImageInfo.getBitmap(AndroidImageInfo.java:32)

I/dalvikvm( 1832): at com.jme3.texture.plugins.AndroidImageLoader.load(AndroidImageLoader.java:14)

I/dalvikvm( 1832): at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:273)

I/dalvikvm( 1832): at com.jme3.asset.AndroidAssetManager.loadTexture(AndroidAssetManager.java:113)

I/dalvikvm( 1832): at com.jme3.asset.DesktopAssetManager.loadTexture(DesktopAssetManager.java:344)

I/dalvikvm( 1832): at com.jme3.asset.DesktopAssetManager.loadTexture(DesktopAssetManager.java:356)

I/dalvikvm( 1832): at v3l.client.util.TextureLoaderBuffer.getTexture(TextureLoaderBuffer.java:49)

I/dalvikvm( 1832): at v3l.client.util.TextureLoader$1.call(TextureLoader.java:38)

I/dalvikvm( 1832): at v3l.client.util.TextureLoader$1.call(TextureLoader.java:34)

I/dalvikvm( 1832): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

I/dalvikvm( 1832): at java.util.concurrent.FutureTask.run(FutureTask.java:137)

I/dalvikvm( 1832): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150)

I/dalvikvm( 1832): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264)

I/dalvikvm( 1832): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)

I/dalvikvm( 1832): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)

I/dalvikvm( 1832): at java.lang.Thread.run(Thread.java:1020)




and

E/AndroidHarness( 1832): Exception thrown in Thread[GLThread 10,5,main]

E/AndroidHarness( 1832): com.jme3.renderer.RendererException: OpenGL Error 1281

E/AndroidHarness( 1832): at com.jme3.renderer.android.OGLESShaderRenderer.checkGLError(OGLESShaderRenderer.java:136)

E/AndroidHarness( 1832): at com.jme3.renderer.android.OGLESShaderRenderer.updateUniform(OGLESShaderRenderer.java:918)

E/AndroidHarness( 1832): at com.jme3.renderer.android.OGLESShaderRenderer.updateShaderUniforms(OGLESShaderRenderer.java:927)

E/AndroidHarness( 1832): at com.jme3.renderer.android.OGLESShaderRenderer.setShader(OGLESShaderRenderer.java:1218)

E/AndroidHarness( 1832): at com.jme3.material.Material.render(Material.java:1037)

E/AndroidHarness( 1832): at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:658)

E/AndroidHarness( 1832): at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:299)

E/AndroidHarness( 1832): at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:351)

E/AndroidHarness( 1832): at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:894)

E/AndroidHarness( 1832): at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:850)

E/AndroidHarness( 1832): at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1126)

E/AndroidHarness( 1832): at com.jme3.renderer.RenderManager.render(RenderManager.java:1168)

E/AndroidHarness( 1832): at com.jme3.app.SimpleApplication.update(SimpleApplication.java:246)

E/AndroidHarness( 1832): at com.jme3.app.AndroidHarness.update(AndroidHarness.java:426)

E/AndroidHarness( 1832): at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:367)

E/AndroidHarness( 1832): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1431)

E/AndroidHarness( 1832): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1180)





is there a way to solve this problem rather than just resize the image ???



thanks in advance :slight_smile:

So this does not happen when you load it directly from the project? I can’t really imagine why that would be so. Else its simple: the image is too big.

Ok , thanks you. This might be because I load so many images file at once. So I should manage how to load each image file by not exceeding its limit right ><"a



could I ask you another question? ( which is maybe very newbie question I think :stuck_out_tongue: )



Suppose I create a boxShape , set its texture “T” , attach boxshape to Node “N” ,. and attach “N” to rootNode. What if I …


  1. detach “N” from rootNode
  2. set Node “N” to null
  3. set boxShape to null ,
  4. clear Texture.param(“ColorMap”)



    which No. (1,2,3,4) above is the case that assetManager consider that texture “T” can be clear from the memory ?



    thanks agian in advance

normal java behavior, no reference means garbage.

Unlike desktop, Android doesn’t have unlimited memory… Each image you’re loading is 1.6 MB so you will run out of heap pretty quickly

I see. So , currently I resize the dimension of images as a temporary solutions. Thanks :slight_smile: