windwaker
windwaker

Reputation: 315

Memory Leak LibGDX ANdroid

I am making a live wallpaper app with libgdx in which I change the assets depending on the time. For. e.g from 6am to 6pm I have the "morning graphics" after that I have "evening graphics" from 6pm to 6am.

The way I have structured the Assets is as follows

I have 12 static arrays of type AtlasRegion 1 static Texture Region variable and 1 static texture variable.

I have two static functions loadMorning() and loadEvening() for loading the assets.

In the funcions I load as follows

For all arrays if they are not null do array.clear() then load the regions. Dispose the TextureRegion variable and set texture variable to null before resetting their values.

The thing that is happening is that after every change of assets the memory seems to increasing As a user's perepective I am using this app to see the memory

https://play.google.com/store/apps/details?id=mem.usage&hl=en

When I start my app for the first time .. it is showing as 68MB in the app ,

Day1 Morning Stats

Day 1

ID      Heap Size       Allocated       Free            %Used    #Objects
1       10.812 MB       3.186 MB        7.626 MB        29.47%    45,405    



                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap        0        0        0        0    16620     4285       38
  Dalvik Heap     8692     8604        0        0    11072     3293     7779
 Dalvik Other     1374     1216        0        0
        Stack       96       96        0        0
    Other dev    33016     4908        4        0
     .so mmap     1266      692      136        0
    .apk mmap      160        0      116        0
    .dex mmap      287       20        8        0
   Other mmap        5        4        0        0
      Unknown     1431     1412        0        0
        TOTAL    46327    16952      264        0    27692     7578     7817

 Objects
               Views:        1         ViewRootImpl:        0
         AppContexts:        3           Activities:        0
              Assets:        2        AssetManagers:        2
       Local Binders:       11        Proxy Binders:       19
    Death Recipients:        0
     OpenSSL Sockets:        0

 SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0

Day 1 Evening Stats

adb log after evening assets are loaded

D/dalvikvm(2451): GC_FOR_ALLOC freed 1619K, 71% free 3281K/11072K, paused 14ms, total 15ms

D/dalvikvm(2451): GC_FOR_ALLOC freed 1517K, 71% free 3281K/11072K, paused 11ms, total 11ms

I/dalvikvm-heap(2451): Grow heap (frag case) to 6.548MB for 1331595-byte allocation

D/dalvikvm(2451): GC_CONCURRENT freed 1862K, 67% free 4127K/12376K, paused 2ms+2ms, total 13ms

D/dalvikvm(2451): GC_EXPLICIT freed 2384K, 74% free 3268K/12376K, paused 2ms+3ms, total 27ms

ID      Heap Size       Allocated       Free            %Used    #Objects
1        10.816 MB      3.191 MB        7.625 MB        29.50%    45,525    


This adb log right after change


                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap        0        0        0        0    16728     4346       29
  Dalvik Heap     1654     1576        0        0    11076     3348     7728
 Dalvik Other     1435     1296        0        0
        Stack      100      100        0        0
    Other dev    63332    32644        4        0
     .so mmap     1110      692      116        0
    .apk mmap        7        0        4        0
    .dex mmap      586       20      368        0
   Other mmap        5        4        0        0
      Unknown     1504     1488        0        0
        TOTAL    69733    37820      492        0    27804     7694     7757

 Objects
               Views:        1         ViewRootImpl:        0
         AppContexts:        3           Activities:        0
              Assets:        2        AssetManagers:        2
       Local Binders:       10        Proxy Binders:       17
    Death Recipients:        0
     OpenSSL Sockets:        0

 SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0

The memory showing in the app is now 117MB This keeps increasing , next morning the size shown in app is about 150 MB.

I need some pointers where to look to understand this better.

Upvotes: 2

Views: 512

Answers (1)

18446744073709551615
18446744073709551615

Reputation: 16832

One remedy against resource leaks in the code that you cannot control is restarting the application. You either kill the process or do System.exit().

But before doing that, you have to schedule a restart.

Please note that although different android releases should all have been compatible, they are not compatible in application restart behavior. At least, v2.x and v4.0 did differ (in v2.x System.exit() caused application restart with the topmost activity closed), not sure about the latest releases.

Upvotes: 0

Related Questions