Skip to content

MDEV MODULE LIFECYCLE

oldmanpushcart@gmail.com edited this page Jan 26, 2023 · 1 revision

BANNER

模块工程介绍

模块生命周期

模块生命周期类型有模块加载模块卸载模块激活模块冻结模块加载完成五个状态。

模块生命周期

  • 模块加载:创建ClassLoader,完成模块的加载
  • 模块卸载:模块增强的类会重新load,去掉增强的字节码
  • 模块激活:模块被激活后,模块所增强的类将会被激活,所有com.alibaba.jvm.sandbox.api.listener.EventListener将开始收到对应的事件
  • 模块冻结:模块被冻结后,模块所持有的所有com.alibaba.jvm.sandbox.api.listener.EventListener将被静默,无法收到对应的事件。需要注意的是,模块冻结后虽然不再收到相关事件,但沙箱给对应类织入的增强代码仍然还在。
  • 模块加载完成:模块加载已经完成,这个状态是为了做日志处理,本身不会影响模块变更行为

模块可以通过实现com.alibaba.jvm.sandbox.api.ModuleLifecycle接口,对模块生命周期进行控制,接口中的方法:

模块加载过程

  • onLoad:模块开始加载之前调用
  • onUnload:模块开始卸载之前调用
  • onActive:模块被激活之前调用,抛出异常将会是阻止模块被激活的唯一方式
  • onFrozen:模块被冻结之前调用,抛出异常将会是阻止模块被冻结的唯一方式

###生命周期实例 DebugLifeCycleModule.java

LOGO

JVM沙箱偏向于底层产品,受众面比较窄,问题反馈沟通很可能会因为各种原因造成不及时。所以我们建立了一个钉钉小群,方便大家在这里进行沟通。

Clone this wiki locally