How do I stop GC_CONCURRENT running so frequently?

11,787

A temporaral solution of the problem was by increasing the HeapSize using dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(32 * 1024 * 1024); However this approach is not recommended and should be avoided.

By Extensive debugging I found that the real problem was due to overlapped interfaces and some leaky functions. Later I removed one of the Interface, redesigned the overall solution and re-factored the code and that solved my problem.

Please share if you have some other Solution,

Share:
11,787
Amit
Author by

Amit

"Be a good person, but never try to prove it." #SOreadytohelp I am a professional programmer and a Certified Scrum Master (CSM) currently working as Full Stack Java Developer. Technical Skills Java (Core and Advaced), Spring Security, MicroServices, AWS, C, C++, Android, JSP, JavaScript, jQuery, AngularJS, HTML,JSP, PL/SQL, Hibernate etc. Areas of Interest Any kind of programming, R & D which pays enough money Java based Application Development i.e. Core Java, J2EE, J2ME, JNI, Web Development Software designing and Solution analysis for cloud plateforms. Have knowledge of AWS architecture but can work on Azure or Google cloud too if case 1 above is true :). Web Services and Microservices Development. Web application security and related frameworks and projects like prevention against OWASP's Top 10 vulnerabilities. Algorithm optimization, fine tuning, research & development.

Updated on June 28, 2022

Comments

  • Amit
    Amit almost 2 years

    I am using a thread which records the audio using AudioRecord class and placed in recorderBUffer (which is a linked list of Short[]) , a separate thread which does the encoding of this data and place it to a playerBuffer(linked list[]). For playing the Audio I am using AudioTrack class and onPeriodicNotification() I read the data from playerBuffer and write it to track.

    The code is simple and straight forwards as it appears. However it doesnt work the way it should. GC_CONCURRENT eats of all the time and which is causing AudioTrack restart so frequently(I guess!). I get following messages from LogCat:-

    04-09 12:25:13.757: E/Constructor(10100): inside constructor 
    04-09 12:25:13.757: I/ApplicationPackageManager(10100): cscCountry is not German : INS
    04-09 12:25:17.429: E/startRecording(10100): start Recording
    04-09 12:25:17.445: I/AudioCapturer(10100): Audio Recorder created
    04-09 12:25:17.546: I/Audio Player(10100): Audio Track instance created buffer Size : 2972
    04-09 12:25:17.546: I/SpeexThread(10100): Thread Started Successfully..
    04-09 12:25:17.734: D/dalvikvm(10100): GC_CONCURRENT freed 55K, 44% free 3208K/5639K, external 408K/517K, paused 4ms+6ms
    04-09 12:25:17.945: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 39% free 3765K/6151K, external 408K/517K, paused 3ms+8ms
    04-09 12:25:18.148: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 36% free 4277K/6663K, external 408K/517K, paused 3ms+8ms
    04-09 12:25:18.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 33% free 4981K/7367K, external 408K/517K, paused 3ms+9ms
    04-09 12:25:18.734: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 29% free 5877K/8263K, external 408K/517K, paused 3ms+9ms
    04-09 12:25:18.828: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:19.164: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 26% free 7093K/9479K, external 408K/517K, paused 3ms+9ms
    04-09 12:25:19.710: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 22% free 8693K/11079K, external 408K/517K, paused 3ms+9ms
    04-09 12:25:19.984: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:20.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 19% free 10741K/13127K, external 408K/517K, paused 3ms+9ms
    04-09 12:25:21.156: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:21.171: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 16% free 12789K/15175K, external 408K/517K, paused 3ms+11ms
    04-09 12:25:21.976: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 14% free 14837K/17223K, external 408K/517K, paused 3ms+9ms
    // same messages errors continue  
    04-09 12:25:28.117: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:29.242: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 29172K/31559K, external 408K/517K, paused 3ms+11ms
    04-09 12:25:29.273: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:30.445: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:30.507: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 31220K/33607K, external 408K/517K, paused 4ms+12ms
    04-09 12:25:31.601: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:31.820: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 33268K/35655K, external 408K/517K, paused 3ms+12ms
    04-09 12:25:32.757: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:33.187: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 35316K/37703K, external 408K/517K, paused 3ms+13ms
    04-09 12:25:33.929: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:34.593: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 37364K/39751K, external 408K/517K, paused 4ms+11ms
    04-09 12:25:35.085: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:36.039: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 39412K/41799K, external 408K/517K, paused 3ms+12ms
    04-09 12:25:36.242: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:37.406: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting
    04-09 12:25:37.617: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 41460K/43847K, external 408K/517K, paused 5ms+13ms
    04-09 12:25:38.640: D/dalvikvm(10100): GC_FOR_MALLOC freed 1K, 6% free 43507K/45895K, external 408K/517K, paused 933ms
    04-09 12:25:38.656: I/SpeexThread(10100): exitting Thread
    04-09 12:25:38.656: E/stopRecording(10100): stop Recording
    

    The AudiTrack is restarted every few miliseconds, and GArbage Collection is called almost continuously. How can I minimize GArbage Colloection calls and what is the reason behind AudioTrack restart ? Plz Help...

  • Carlo Moretti
    Carlo Moretti almost 12 years
    I have same issue, can you please post some sample of your fixes? I know they may be specific, but may still be useful. Thanks
  • Amit
    Amit almost 12 years
    I just added the above line inside the onCreate() to increase the memory size.. It worked, however later you need to refactor your code so that memory use is optimized...
  • Kurt Wagner
    Kurt Wagner over 9 years
    It seems like this temp solution is no longer possible. I'm running into a VMRuntime symbol cannot be found.