ART assumes that they will never do a GC while an application image is being created at run-time and that's because they set the heap size to effectively be infinite during the start up process. But this is not the case for MMTk.
The thread which generates the app image (HeapTaskDaemon thread) transitions to a state where it can't be suspended. So we're getting a case where a run-time app image is being created at the same time a GC occurs and we try to suspend the HeapTaskDaemon but we can't because it's in an unsuspendable state. After a time-out of 30s, we give up trying to suspend it and die.
ART assumes that they will never do a GC while an application image is being created at run-time and that's because they set the heap size to effectively be infinite during the start up process. But this is not the case for MMTk.
The thread which generates the app image (
HeapTaskDaemon
thread) transitions to a state where it can't be suspended. So we're getting a case where a run-time app image is being created at the same time a GC occurs and we try to suspend theHeapTaskDaemon
but we can't because it's in an unsuspendable state. After a time-out of 30s, we give up trying to suspend it and die.