[K/N] Parallelize marking in CMS GC
This change parallelizes marking by making each non-native Kotlin thread mark its own view of the heap. To make this safe, we make flipping the marking bit atomic which ensures that threads do not try to trace the same objects. Co-authored-by: Johan Bay <jobay@google.com> Merge-request: KOTLIN-MR-423 Merged-by: Alexander Shabalin <alexander.shabalin@jetbrains.com>
This commit is contained in:
@@ -19,6 +19,7 @@ using Kotlin_getSourceInfo_FunctionType = int(*)(void * /*addr*/, SourceInfo* /*
|
||||
* but can be changed after compiling caches. So use this way for variables, which will be rarely accessed.
|
||||
*/
|
||||
RUNTIME_WEAK int32_t Kotlin_destroyRuntimeMode = 1;
|
||||
RUNTIME_WEAK int32_t Kotlin_gcMarkSingleThreaded = 1;
|
||||
RUNTIME_WEAK int32_t Kotlin_workerExceptionHandling = 0;
|
||||
RUNTIME_WEAK int32_t Kotlin_suspendFunctionsFromAnyThreadFromObjC = 0;
|
||||
RUNTIME_WEAK Kotlin_getSourceInfo_FunctionType Kotlin_getSourceInfo_Function = nullptr;
|
||||
@@ -33,6 +34,10 @@ ALWAYS_INLINE compiler::DestroyRuntimeMode compiler::destroyRuntimeMode() noexce
|
||||
return static_cast<compiler::DestroyRuntimeMode>(Kotlin_destroyRuntimeMode);
|
||||
}
|
||||
|
||||
ALWAYS_INLINE bool compiler::gcMarkSingleThreaded() noexcept {
|
||||
return Kotlin_gcMarkSingleThreaded != 0;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE compiler::WorkerExceptionHandling compiler::workerExceptionHandling() noexcept {
|
||||
return static_cast<compiler::WorkerExceptionHandling>(Kotlin_workerExceptionHandling);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user