当使用Kotlin :: class.java.canonicalName时OutOfMemoryexception
运行这行代码时,出现Out Of Memoryexception
private val TAG = KotlinFilePicker()::class.java.canonicalName
并禁用时,它工作正常
Throwing OutOfMemoryError "Failed to allocate a 170 byte allocation with 68 free bytes and 68B until OOM" (recursive case) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: "main" prio=5 tid=1 Runnable 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: | group="main" sCount=0 dsCount=0 obj=0x7581c250 self=0xb4f07800 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: | sysTid=20584 nice=-11 cgrp=apps sched=0/0 handle=0xb6fd7ec8 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: | state=R schedstat=( 0 0 0 ) utm=1394 stm=35 core=1 HZ=100 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: | stack=0xbe57a000-0xbe57c000 stackSize=8MB 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: | held mutexes= "mutator lock"(shared held) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at android.support.v4.app.FragmentHostCallback.(FragmentHostCallback.java:46) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at android.support.v4.app.FragmentHostCallback.(FragmentHostCallback.java:63) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at android.support.v4.app.FragmentActivity$HostCallbacks.(FragmentActivity.java:871) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at android.support.v4.app.FragmentActivity.(FragmentActivity.java:100) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at android.support.v7.app.AppCompatActivity.(AppCompatActivity.java:61) 01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art: at com.androidbuffer.kotlinfilepicker.KotlinFilePicker.(KotlinFilePicker.kt:19) 01-04 00:14:55.044 20584-20584/com.android
有人能指出这样做有什么问题
不应该是
private val TAG = KotlinFilePicker::class.java.canonicalName
代替?
由于你的堆栈跟踪状态如下:
Failed to allocate a 170 byte allocation with 68 free bytes and 68B until OOM" (recursive case)
这意味着我们在这里有一个无限的递归。 仔细看看代码,我们看到你创建了一个类的实例,它试图创建TAG
属性,这又创建了KotlinFilePicker
另一个实例…直到所有的内存耗尽。
你正在创建一个新的KotlinFilePicker()
,它有自己的TAG,它创建一个新的KotlinFilePicker()
。
修复它使用KotlinFilePicker::class.java.canonicalName
。
- 如何解决KaptError:Android Studio 3.0中的注释处理时出错?
- Gson Map to Object
- 在Kotlin Android中将数据添加到RecyclerView
- Android中的文字闪烁着最简洁的Kotlin
- 如何使“this”成为Listener的参考,而不是Kotlin中的Activity?
- Kotlin lateinit属性,NPE危险?
- 在lateinit声明后variables不更新,无法返回
- 找不到引用类kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck
- 使用okHTTP和GSON从API中提取数据