发表时间: 2020-04-28  |  分类: jvm-sandbox  |  标签: jvm-sandbox java-agent

DefaultCoreModuleManager

简述:模块管理器,实现CoreModuleManager接口。构造该类对象时会加载并初始化所有的系统模块和用户模块。

关键方法

1. fireModuleLifecycle

简述:发布模块生命周期事件。如果模块自身实现了ModuleLifecycle接口,则优先调用该模块的生命周期方法 。然后会通过ModuleLifeCycleEventBus(模块生命周期事件总线)发布该模块的生命周期时间。模块的声明周期时间包括:

  1. LOAD:正在加载
  2. LOAD_COMPLETED:加载完成
  3. UNLOAD:正在卸载
  4. ACTIVE:激活
  5. FROZEN:冻结
阅读
发表时间: 2020-04-28  |  分类: jvm-sandbox  |  标签: jvm-sandbox java-agent
  1. DefaultCoreModuleManager类的构造方法最后会执行一次reset方法初始化所有模块

  2. reset内部会通过如下代码加载模块

    new ModuleJarLoader(moduleLibDir, cfg.getLaunchMode(), sandboxClassLoader)
            .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback());
    
  3. ModuleJarLoader会扫描模块目录下的所有jar包,然后对每一个jar包都执行从步骤4开始的流程

  4. 先调用ModuleJarLoadCallback.onLoad(moduleJarFile),只有通过了整个模块jar加载链的回调的jar包才能被加载。如果回调链中任何一个回调抛出异常,都不会继续加载该模块(但不影响下一个模块的加载)。

  5. 为该jar包构建一个专用的ModuleClassLoader

阅读
发表时间: 2020-04-28  |  分类: jvm-sandbox  |  标签: jvm-sandbox java-agent

DefaultModuleResourceManager

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

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

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

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

阅读
关闭