-
Notifications
You must be signed in to change notification settings - Fork 1.6k
MDEV MODULE LIFECYCLE
oldmanpushcart@gmail.com edited this page Jan 26, 2023
·
1 revision
模块生命周期类型有模块加载
、模块卸载
、模块激活
、模块冻结
、模块加载完成
五个状态。
- 模块加载:创建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
JVM沙箱偏向于底层产品,受众面比较窄,问题反馈沟通很可能会因为各种原因造成不及时。所以我们建立了一个钉钉小群,方便大家在这里进行沟通。