Android OutOfMemoryError:未能分配一个57993496字节分配与16764448空闲字节

我正在尝试使我的count变量同步get和私人帮助功能设置基于其他成员。 每个线程都调用setCount()作为deadlineNoteVisiblereferencesAvailable变更。

setCount()方法synchronized ,事情是好的,但是当我添加synchronized(this)get()调用时,我得到:

 OutOfMemoryError: Failed to allocate a 57993496 byte allocation with 16764448 free bytes and 32MB until OOM 

代码(写在Kotlin):

 var count: Int = 0 // Why does adding synchronized here explode? get() = synchronized(this) { count } private set private fun setCount() { synchronized(this) { count = 0 if (deadlineNoteVisible) { count += 1 } if (referencesAvailable) { count += 1 } } } 

堆栈跟踪:

 Error reporting crash java.lang.OutOfMemoryError: Failed to allocate a 57993496 byte allocation with 16764448 free bytes and 32MB until OOM at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95) at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125) at java.lang.StringBuffer.append(StringBuffer.java:278) at java.io.StringWriter.write(StringWriter.java:123) at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358) at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303) at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625) at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658) at java.io.PrintWriter.append(PrintWriter.java:691) at java.io.PrintWriter.append(PrintWriter.java:687) at java.io.Writer.append(Writer.java:198) at java.lang.Throwable.printStackTrace(Throwable.java:324) at java.lang.Throwable.printStackTrace(Throwable.java:300) at android.util.Log.getStackTraceString(Log.java:343) at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:61) at com.android.internal.os.RuntimeInit.-wrap0(RuntimeInit.java) at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86) at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:249) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 

其实你有一个StackOverflowError因为你无条件地从getCount()调用getCount() 。 我想这只是一个错字,代码应该是:

 var count: Int = 0 get() = synchronized(this) { field } private set 

此处的field标识符允许您访问该属性的后台字段。 你可以阅读更多关于支持字段在这里 。