1
bunnyblueair 1 天前
ProGuard
|
2
4ra1n OP ProGuard 主要是两个问题,第一个配置非常麻烦,不是容易上手的方式
另外一个问题是,它应该是静态分析的引用关系,而不是动态决定的,比如反射问题,某些功能如果是运行时候决定是否调用某个类的,是无法处理的 |
3
foolishcrab 1 天前
可行,不需要考虑对应用性能影响的时候这个是很简单的东西。
叫 reachability analysis, native image 就有一个专门的 agent 来收集 runtime reflection metadata 之类的东西。 其实这个方案最大的问题在于你帖子里的第二步,对于一个大型软件而言这是很难的,所以一般要在生产上挂着用真实流量收集,这样的话就需要考虑 agent 的性能影响。这里就不展开了 |
4
sagaxu 23 小时 57 分钟前
java --verbose:class 找出用到的所有 class 和 jar 包,删掉没用的 jar 包,甚至 jar 包内部删掉无用的 class
|
5
chendy 22 小时 23 分钟前
fat jat 解压开,依赖的 jar 包放某个共享目录
所有项目挂在这个共享目录,然后配好 classpath 比较丑陋,但是确实能用 |
6
4ra1n OP 已经实现了,大概是:
capabilities.can_generate_all_class_hook_events = 1; (*jvmti)->AddCapabilities(jvmti, &capabilities); callbacks.ClassFileLoadHook = &ClassLoadHook; 在 ClassLoadHook 函数中做收集 java 启动参数 -agentpath:/path/to/agent.dll 可以收集所有加载的 class 信息,动态地 |