迁移到新的内存管理器

最终更新: 2025/02/06

本向导会对新的 Kotlin/Native 内存管理器 与旧的内存管理器进行比较, 并介绍如何迁移你的项目.

新内存管理器最重要的变化是解除了对象共享的限制. 在线程之间共享对象时, 你不需要冻结对象, 具体来说:

  • 顶层属性不需要标注 @SharedImmutable, 可以被任意线程访问和修改.

  • 通过代码交互传递的对象不需要冻结, 可以被任意线程访问和修改.

  • Worker.executeAfter 不再要求其中的操作被冻结.

  • Worker.execute 不再需要生成者返回一个孤立的对象子图(subgraph).

  • 包含 AtomicReferenceFreezableAtomicReference 的环形引用不会导致内存泄露.

除了对象共享更加容易之外, 新的内存管理器还带来了其他主要变化:

  • 全局属性会在定义它们的文件被初次访问时延迟执行它们的初始化. 以前全局属性会在程序启动时初始化. 作为一个变通方法, 你可以使用 @EagerInitialization 注解, 将属性标注为必须在程序启动时初始化. 使用这个注解之前, 请先阅读它的 文档.

  • by lazy {} 属性支持线程安全模式, 而且不处理无限递归.

  • Worker.executeAfteroperation 中抛出的异常, 会和运行时的其它部分一样进行处理, 尝试执行一个用户自定义的、未被处理的异常处理程序, 如果没有找到异常处理程序, 或异常处理程序自身也抛出异常而失败, 则终止程序.

  • 冻结功能已被废弃, 而且始终禁用.

要从旧的内存管理器迁移你的项目, 请遵循下面的步骤: