Can I postpone garbage collection after loading

I load 3d models (1MB-10MB) into memory, which takes a lot of time (20 seconds for a 1.5MB model). When I look at the logs, I see that the garbage collector constantly frees up memory and pauses. The following are the logs:

07-20 17:37:25.340: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 79443K/85575K, paused 86ms 07-20 17:37:25.350: I/dalvikvm-heap(2826): Grow heap (frag case) to 78.511MB for 852408-byte allocation 07-20 17:37:25.450: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 80275K/86471K, paused 95ms 07-20 17:37:25.550: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 80275K/86471K, paused 85ms 07-20 17:37:25.550: I/dalvikvm-heap(2826): Grow heap (frag case) to 79.325MB for 852408-byte allocation 07-20 17:37:25.660: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 81108K/87367K, paused 96ms 07-20 17:37:25.760: D/dalvikvm(2826): GC_FOR_ALLOC freed 0K, 8% free 81108K/87367K, paused 87ms 07-20 17:37:25.760: I/dalvikvm-heap(2826): Grow heap (frag case) to 80.137MB for 852408-byte allocation 07-20 17:37:25.870: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 81940K/88263K, paused 98ms 07-20 17:37:26.060: D/dalvikvm(2826): GC_CONCURRENT freed <1K, 5% free 83988K/88263K, paused 3ms+12ms 07-20 17:37:26.200: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 84715K/88263K, paused 120ms 07-20 17:37:26.200: I/dalvikvm-heap(2826): Grow heap (frag case) to 83.660MB for 852312-byte allocation 07-20 17:37:26.310: D/dalvikvm(2826): GC_FOR_ALLOC freed 0K, 5% free 85547K/89159K, paused 102ms 07-20 17:37:26.420: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 85547K/89159K, paused 95ms 07-20 17:37:26.420: I/dalvikvm-heap(2826): Grow heap (frag case) to 84.473MB for 852312-byte allocation 07-20 17:37:26.520: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 86379K/90055K, paused 105ms 07-20 17:37:26.640: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 4% free 87212K/90055K, paused 117ms 07-20 17:37:26.650: I/dalvikvm-heap(2826): Grow heap (frag case) to 86.098MB for 852312-byte allocation ... 

Can I postpone garbage collection until the model loads. Any other performance recommendations are also welcome :)

+4
source share
3 answers

No, this is not possible, the virtual machine processes it and does not change. But to speed up loading models, you can use serialized objects instead of .3ds / .obj / .... files. They will load faster and use less memory.

Check out the wiki about jpct and serialized objects.

+1
source

No, you cannot postpone garbage collection or manage it in any other way.

But you can use the Allocation Tracker from DDMS to find exactly where you are creating new objects. Try reusing the same objects and buffers, avoid automatic boxing, etc. This article on the use of Allocation Tracker may be helpful.

+2
source

no.

In any case, if you notice in the logs, the virtual machine is fighting for memory. It has ~ 5% free. it must run GC to continue running your application.

In addition, you do not want to do this if you can. intelligent people have developed optimal garbage collection algorithms for decades. don't try me smarter than them.

+1
source

All Articles