有没有什么思路对 Fat Jar 进行瘦身

4ra1n · 昨天 18:30 · 515 次点击
考虑到反射或者懒加载等内容,我思路是这样的:

1. 启动时挂一个 java agent 上去,内容是 hook 加载本地 jar 文件的方法
2. 用户尝试自己需要的功能,例如注册/登录/管理后台等等,完全做一遍
3. 然后看整个流程中 java agent 这边记录的,都加载了哪些 jar 文件
4. 对比存在的 jar 得出一个可以删掉的 jar 列表

请教下这个思路是否可行,以及我需要 hook 的类应该是哪些,或者有没有更好的思路
举报· 515 次点击
登录 注册 站外分享
4 条回复  
bunnyblueair 小成 昨天 18:45
ProGuard
4ra1n 楼主 小成 昨天 19:01
ProGuard 主要是两个问题,第一个配置非常麻烦,不是容易上手的方式 另外一个问题是,它应该是静态分析的引用关系,而不是动态决定的,比如反射问题,某些功能如果是运行时候决定是否调用某个类的,是无法处理的
foolishcrab 小成 昨天 22:09
可行,不需要考虑对应用性能影响的时候这个是很简单的东西。 叫 reachability analysis, native image 就有一个专门的 agent 来收集 runtime reflection metadata 之类的东西。 其实这个方案最大的问题在于你帖子里的第二步,对于一个大型软件而言这是很难的,所以一般要在生产上挂着用真实流量收集,这样的话就需要考虑 agent 的性能影响。这里就不展开了
sagaxu 初学 昨天 22:16
java --verbose:class 找出用到的所有 class 和 jar 包,删掉没用的 jar 包,甚至 jar 包内部删掉无用的 class
返回顶部