代码之家  ›  专栏  ›  技术社区  ›  vikas kumar

使用Kotlin::类时发生OutOfMemory异常。Java语言规范名称

  •  0
  • vikas kumar  · 技术社区  · 8 年前

    运行这行代码时出现内存不足异常

    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.<init>(FragmentHostCallback.java:46)
    01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art:     at android.support.v4.app.FragmentHostCallback.<init>(FragmentHostCallback.java:63)
    01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art:     at android.support.v4.app.FragmentActivity$HostCallbacks.<init>(FragmentActivity.java:871)
    01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art:     at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:100)
    01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art:     at android.support.v7.app.AppCompatActivity.<init>(AppCompatActivity.java:61)
    01-04 00:14:55.044 20584-20584/com.androidbuffer.kotlinfilepickersample E/art:     at com.androidbuffer.kotlinfilepicker.KotlinFilePicker.<init>(KotlinFilePicker.kt:19)
    01-04 00:14:55.044 20584-20584/com.android
    

    有人能指出这样做有什么不对吗

    2 回复  |  直到 8 年前
        1
  •  3
  •   aga    8 年前

    难道不是吗

    private val TAG = KotlinFilePicker::class.java.canonicalName
    

    相反

    由于stacktrace声明如下:

    Failed to allocate a 170 byte allocation with 68 free bytes and 68B until OOM" (recursive case)
    

    这意味着这里有一个无休止的递归。仔细看一下代码,我们看到您创建了一个类的实例,该实例试图创建 TAG 属性,从而创建 KotlinFilePicker ... 直到所有内存耗尽。

        2
  •  2
  •   Charles Durham    8 年前

    您正在创建一个新的 KotlinFilePicker() 它有自己的标签,可以创建一个新的 Kotlinfipepicker() 发射型计算机断层扫描仪。

    要修复它,请使用 KotlinFilePicker::class.java.canonicalName .