[K/N] mention freezing binaryOption in NEW_MM.md
This commit is contained in:
@@ -146,4 +146,39 @@ A number of known performance issues:
|
|||||||
the application with a larger memory footprint than necessary, making it a more likely target to be terminated by the OS.
|
the application with a larger memory footprint than necessary, making it a more likely target to be terminated by the OS.
|
||||||
* WASM (or indeed any target that does not have pthreads) is not supported with the new MM.
|
* WASM (or indeed any target that does not have pthreads) is not supported with the new MM.
|
||||||
|
|
||||||
|
## Workarounds
|
||||||
|
|
||||||
|
### Unexpected object freezing
|
||||||
|
Some libraries might not be ready for the new memory model and freeze-transparency of `kotlinx.coroutines`, so unexpected `InvalidMutabilityException`
|
||||||
|
or `FreezingException` might appear.
|
||||||
|
To workaround such cases, we added a `freezing` binary option that disables freezing fully (`disabled`) or
|
||||||
|
partially (`explicitOnly`).
|
||||||
|
The former disables freezing mechanism at runtime (thus, making it no-op) while the latter disables automatic freezing of
|
||||||
|
[`@SharedImmutable`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.native.concurrent/-shared-immutable/) globals,
|
||||||
|
but keeps direct calls to [`freeze`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.native.concurrent/freeze.html) fully functional.
|
||||||
|
Similar to the [new memory model](#switch-to-the-new-memory-model), there are several ways to enable this option:
|
||||||
|
* In `gradle.properties`:
|
||||||
|
```properties
|
||||||
|
kotlin.native.binary.freezing=disabled
|
||||||
|
```
|
||||||
|
* In Gradle build script:
|
||||||
|
```kotlin
|
||||||
|
// build.gradle.kts
|
||||||
|
|
||||||
|
kotlin.targets.withType(KotlinNativeTarget::class.java) {
|
||||||
|
binaries.all {
|
||||||
|
binaryOptions["freezing"] = "disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
* Compiler flag:
|
||||||
|
```
|
||||||
|
-Xbinary=freezing=disabled
|
||||||
|
```
|
||||||
|
Please note that this option works only with the new MM.
|
||||||
|
|
||||||
|
If you want not just workaround the problem, but actually track down the source of the exceptions then
|
||||||
|
[`ensureNeverFrozen`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.native.concurrent/ensure-never-frozen.html) is your best friend.
|
||||||
|
|
||||||
|
---
|
||||||
**TODO**: A place to submit feedback
|
**TODO**: A place to submit feedback
|
||||||
|
|||||||
Reference in New Issue
Block a user