Releases: alibaba/jvm-sandbox
[email protected]
SANDBOX小版本发布
变更说明
- 支持增强NATIVE方法,但限制在JDK[1.8,12]中启用 #281
- 支持JDK17 #347
- 优化类匹配性能 #292 ,需要升级
sandbox-api
到1.4.0
- 修复已知BUG #328 #352 #385 等
兼容声明
-
整体工程从JDK1.6迁移到JDK1.8,之前的JDK版本将不会再支持。这一点也是充分参考了不同JVM版本的市场份额和基于1.6的代码维护成本过高做了权衡。仍然在使用JDK1.6版本的用户请继续使用之前的沙箱版本。
-
增强NATIVE方法。因受到沙箱实现方案的限制,对JVM版本也有对应的限制要求。NATIVE方法增强将会在JDK[1.8,12]中启用,其他版本不开放。不排除后续调整NIATVE方法增强方案的改变后重新支持的可能。
需要增强
java.lang.System#java.lang.System#currentTimeMillis()
方法的,请务必参考FAQ建议:沙箱如何增强JVM固有函数
API
GROUP-ID | ARTIFACT-ID | VERSION |
---|---|---|
com.alibaba.jvm.sandbox | sandbox-api | 1.4.0 |
com.alibaba.jvm.sandbox | sandbox-module-starter | 1.4.0 |
[email protected]
SANDBOX问题修复版本
-
修改类加载时间,将类加载时机提前到init阶段,同时恢复addTransformer时机
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.3.1 com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1
[email protected]
SANDBOX问题修复版本
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.3.1 com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1
[email protected]
SANDBOX问题修复版本
-
功能特性
-
修复:
- 解决 #238 提出的:当环境变量$USER不存在时,使用
whoami
代替 - 修复 #242 提出的:修复在类加载过程中遇到看到Sandbox自己的类情况,规避由此引发的类加载死锁。明确sandbox不能增强以下类
- sandbox自身的类
- 被sandbox的ClassLoader所加载的类
- 修复 #256 提出的:EventWatchBuilder对AdviceListener存在匹配歧义风险,模块开发可能会通过这个不严谨的API在利用AdviceListener观察事件中漏指定掉必要的观察事件。
- 修复Advice.getBehavior()因为懒加载遇到BeforeEvent对象复用时,导致信息被污染的BUG
- 修复 #253 提出的:AOP增强两个嵌套调用的方法时会引起事件错位的问题
- 解决 #250 提出的:如果你想观察JVM底层基础类(比如String.class)在Sandbox操作过程中会产生大量的类加载行为,引起公共基础类被大量观察,从而影响性能。
- 解决 #238 提出的:当环境变量$USER不存在时,使用
-
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.3.1 com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1
[email protected]
SANDBOX探针调用从反射切换为接口调用提升容器性能
-
功能特性
-
优化:
-
改变Spy调用采用反射的机制,使用SpyHandler的接口调用,提升性能
因为改变了
sandbox-spy
包的行为,所以本次升级必须要重启目标JVM -
降低sandbox.sh脚本对环境要求的兼容性,当环境不匹配时更多主动的是报错而不是尝试兼容
-
-
修复:
-
新增:
-
Module中Command注解的方法入参,新增
java.io.OutputStream
类型。但不能和
java.io.PrintWriter
同时声明,否则运行会报错!
-
-
-
不兼容声明
因为改变了
sandbox-spy
包的行为,所以本次升级必须要重启目标JVM -
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.3.0 com.alibaba.jvm.sandbox sandbox-module-starter 1.3.0
[email protected]
BUGFIX版本
-
功能特性
-
新增:
- Advice可以获取到对应的ClassLoader #161
-
修复:
-
修复并发搜索类时导致内存泄漏问题
原有的GaLRUCache采用的是LinkedHashMap实现,会在并发情况下搜索模块出现内存泄漏,导致FG。并发的场景是JVM自己的类加载触发类搜索和module自己增强时主动搜索情况。修复方案是使用Guava的LRU替换自己实现的GaLRUCache。
-
懒加载化Advice结构部分重量级字段的获取,提升AdviceListener的性能和稳定性
-
优化类搜索、事件处理等关键路径上使用String.format()导致性能开销过大的问题 #209
-
修复properties配置文件配置的ip/port不生效 #143
-
修复查找JVM_HOME一定概率出现问题 #141
-
-
-
不兼容声明
无
-
API
无
[email protected]
sandbox主目录下增加user module默认启动目录
- 1.2.1版本二进制包下载
- 功能特性
- 新增: sandbox主目录下新增sandbox-module子目录,作为用户module的默认启动目录。-f,-F可刷新该目录下的模块。同时兼容sandbox.properties中指定user_module=~/.sandbox-module。
- 不兼容声明
无 - API
无
[email protected]
JVM-SANDBOX-DEVELOP-20181227日常问题修复
-
功能特性
-
新增: sandbox-api增加ModuleJarUnLoadSpi.java,允许在ModuleJar文件被卸载的时候执行回调,可以在这个回调释放Jar包加载时所申请的资源。(例如:logback的线程池等)
-
新增: sandbox-api增加Command.java标注,用于替代
@Http
标注。@Command
标注的好处在于他可以让你摆脱对javax.servlet的依赖。@Command
标注在方法上,支持三类入参类型- URL的单值参数转换成Map:java.util.Map<String,String>
- URL的多值参数转换成Map:java.util.Map<String,String[]>
- 文本输出:java.io.PrintWriter
-
废弃: sandbox-api将废弃一些高危险类、低使用类
- 废弃
WebSocket
、EventListenerFactory
、ThreadSafeEventListener
,使用的人太少,增加复杂度 - 废弃
@Http
标注,变更为@Command
标注 - 废弃
Sentry
,不规范的使用ThreadLocal容易引起内存泄漏,推荐自己管理或者使用Advice的attach机制 - 废弃
EventMonitor
和sandbox.properties
中关于对象池的配置,因为已经废弃了对象池 - 废弃sandbox-api模块对
javax.servlet
的依赖,因兼容性的需求所以maven中的依赖尚未废除,但你确定用@Command
标注代替@Http
标注之后,可以在依赖中exclusion掉<dependency> <groupId>com.alibaba.jvm.sandbox</groupId> <artifactId>sandbox-api</artifactId> <scope>provided</scope> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency>
- 废弃
-
优化: 废弃对内存、性能影响巨大的对象池的实现
沙箱原本依靠对象池来解决运行过程中产生的大量Event对象问题,希望能通过这样的机制降低新声代的压力。但实际使用过程中我们发现:
- 对象池大小不好控制
- 对象池分配/归还对象对性能影响巨大
所以在这个版本中,我们将全局对象池的实现变更为:给每一个线程分配固定数量的Event
-
优化: Spy.SelfCallBarrier对象的锁机制 #109
-
优化: 支持JDK11 #136
-
修复: 沙箱的类分析机制会在SpringBoot触发java.lang.LinkageError异常 #133
-
修复: 沙箱在卸载时会引起“空指针”的问题
-
修复: 沙箱在卸载/重新加载时会引起“对象转换异常”问题 #125
-
修复: 在OpenJDK8下JIT触发崩溃的问题 #130
-
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.2.0 com.alibaba.jvm.sandbox sandbox-module-starter 1.2.0
[email protected]
JVM-SANDBOX-DEVELOP-20181212日常问题修复
-
功能特性
- 增强:EventWatchBuilder支持正则表达式模式
- 优化:日志框架进行优化
- 修复:修复问题 #117
在AdviceAdapterListener 中的 before 阶段直接使用 returnImmediately 方法修改返回值导致内存溢出
- 修复:修复重复查询user_module的BUG(稍微影响启动性能)
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.1.2 com.alibaba.jvm.sandbox sandbox-module-starter 1.1.2
[email protected]
JVM-SANDBOX-DEVELOP-20181027日常问题修复
-
功能特性
-
增强:ASM框架升级到ASM7,为下一个版本适应JDK8的字节码做准备
-
修复:校准
ClassStructureImplByJDK
和ClassStructureImplByAsm
的实现逻辑,修复- 内部类的
getAccess()
方法返回错误的属性 - 修复两个类对内部枚举类型数组
getSignCode()
时返回的结果存在差异 #107 - 修复
getFamilyInterfaceClassStructures()
返回时忘记考虑获取家族接口类结构时忘记考虑自身父类的情况 - 补充了
ClassStructure
相关的测试用例
- 内部类的
-
修复:修复容器shutdown时没有正确释放所有内存的问题 #108
-
增强:模块匹配搜索类时,去掉
java.lang.Object
的匹配,加速类匹配速度 -
增强:添加CI集成测试插件
-
-
不兼容声明
无
-
API
GROUP-ID ARTIFACT-ID VERSION com.alibaba.jvm.sandbox sandbox-api 1.0.16 com.alibaba.jvm.sandbox sandbox-module-starter 1.0.16