jvm-sandbox DefaultModuleResourceManager
发表时间 2020-04-28  |  浏览量:  |  分类: jvm-sandbox

DefaultModuleResourceManager

简述:该类自动管理了模块相关的可释放资源。

该类内部持有一个Map<String, List<WeakResource<?>>> moduleResourceListMapping对象,该map的key为模块id,value为该模块持有的可释放资源链表,每个资源都使用弱引用持有, 避免OOM。

当调用该类的append方法添加可释放资源时,内部就会将其添加到moduleResourceListMapping中。

在WebSocket关闭时,或者处理每个http请求的最后,都会调用该类的remove方法移除资源,因为请求处理结束了或者WebSocket关闭了,那这个资源就可以释放了。remove方法内部还会清除无效的资源,比如被GC的资源(因为是弱引用)。

该类实现了ModuleLifeCycleEventBus.ModuleLifeCycleEventListener接口,因此可以监听所有模块的生命周期事件。

当收到模块的UNLOAD事件时,会执行如下处理流程;

  1. moduleResourceListMapping移除所有该模块相关的资源
  2. 执行这些资源的release方法,用以释放资源。
关闭