Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting an OutOfMemoryError exception #3182

Closed
turkergoksu opened this issue Feb 10, 2022 · 3 comments
Closed

Getting an OutOfMemoryError exception #3182

turkergoksu opened this issue Feb 10, 2022 · 3 comments
Labels

Comments

@turkergoksu
Copy link

turkergoksu commented Feb 10, 2022

Is it possible that we might getting this error because of maxPoolSize field in CoroutineScheduler which might be depending on jvm versions? We get the trace from crashlytics and can not reproduce by ourself.

Android Version: 6.0 and 7.0
Coroutines: 1.6.0

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 8388616 byte allocation with 6577392 free bytes and 6MB until OOM
       at java.util.concurrent.atomic.AtomicReferenceArray.<init>(AtomicReferenceArray.java:64)
       at kotlinx.coroutines.scheduling.CoroutineScheduler.<init>(CoroutineScheduler.kt:264)
       at kotlinx.coroutines.scheduling.SchedulerCoroutineDispatcher.createScheduler(Dispatcher.kt:95)
       at kotlinx.coroutines.scheduling.SchedulerCoroutineDispatcher.<init>(Dispatcher.kt:92)
       at kotlinx.coroutines.scheduling.DefaultScheduler.<init>(Dispatcher.kt:13)
       at kotlinx.coroutines.scheduling.DefaultScheduler.<clinit>(Dispatcher.kt)
       at kotlinx.coroutines.Dispatchers.<clinit>(Dispatchers.kt:32)
       at kotlinx.coroutines.Dispatchers.getDefault(Dispatchers.java:32)
       at com.some.coroutines.CoroutinesModule.providesDefaultDispatcher(CoroutinesModule.java:19)
       at com.some.coroutines.CoroutinesModule_ProvidesDefaultDispatcherFactory.providesDefaultDispatcher(CoroutinesModule_ProvidesDefaultDispatcherFactory.java:25)
       at com.some.coroutines.CoroutinesModule_ProvidesDefaultDispatcherFactory.get(CoroutinesModule_ProvidesDefaultDispatcherFactory.java:17)
       at com.some.coroutines.CoroutinesModule_ProvidesDefaultDispatcherFactory.get(CoroutinesModule_ProvidesDefaultDispatcherFactory.java:9)
       at com.some.domain.SomeAUseCase_Factory.get(SomeAUseCase_Factory.java:24)
       at com.some.domain.SomeAUseCase_Factory.get(SomeAUseCase_Factory.java:9)
       at com.some.domain.SomeBUseCase_Factory.get$bridge(SomeBUseCase_Factory.java:46)
       at com.some.domain.SomeCUseCase_Factory.get(SomeCUseCase_Factory.java:32)
       at com.some.domain.SomeCUseCase_Factory.get(SomeCUseCase_Factory.java:9)
       at com.some.abtestdecider.data.repository.ABRepositoryImpl_Factory.get$bridge(ABRepositoryImpl_Factory.java:37)
       at com.some.ui.SomeDViewModel_Factory.get(SomeDViewModel_Factory.java:187)
       at com.some.ui.SomeDViewModel_Factory.get(SomeDViewModel_Factory.java:41)
       at com.some.app.ViewModelFactory.create(ViewModelFactory.java:42)
       at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
       at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
       at com.some.ui.SomeEFragmentModule.provideSomeEViewModel(SomeEFragmentModule.java:13)
       at com.some.ui.SomeEFragmentModule_ProvideSomeEViewModelFactory.provideSomeEViewModel(SomeEFragmentModule_ProvideSomeEViewModelFactory.java:37)
       at com.some.app.DaggerAppComponent$SomeEFragmentSubcomponentImpl.viewModelInjectionSomeEViewModel(DaggerAppComponent.java:39519)
       at com.some.app.DaggerAppComponent$SomeEFragmentSubcomponentImpl.injectSomeEFragment(DaggerAppComponent.java:39536)
       at com.some.app.DaggerAppComponent$SomeEFragmentSubcomponentImpl.inject(DaggerAppComponent.java:39524)
       at com.some.app.DaggerAppComponent$SomeEFragmentSubcomponentImpl.inject(DaggerAppComponent.java:39501)
       at dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:113)
       at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:134)
       at dagger.android.support.AndroidSupportInjection.inject(AndroidSupportInjection.java:75)
       at dagger.android.support.AndroidSupportInjection.inject(AndroidSupportInjection.java:67)
       at com.some.base.BaseFragment.onAttach(BaseFragment.kt:134)
       at androidx.fragment.app.Fragment.performAttach(Fragment.java:2922)
       at androidx.fragment.app.FragmentStateManager.attach(FragmentStateManager.java:464)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1348)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1522)
       at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1246)
       at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1128)
       at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:135)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2157)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
       at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7225)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
@dkhalanskyjb
Copy link
Collaborator

Looking at the code, we always permit at most 2 million threads, no conditionals on the JVM version.

I think the culprit is

and 6MB until OOM

There's really not a lot of memory left.

@qwwdfsad
Copy link
Member

It feels like your application is almost out of memory and this particular place is just the trigger.

It indeed tries to allocate 8-16MB depending on various JVM flag (aka depending on actual reference size), but it's fixed with #3137 in upcoming 1.6.1

@turkergoksu
Copy link
Author

We'll follow the issue. Thank you for quick response 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants