You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已发布制品的二进制死代码消除可行性及依赖影响问询

二进制制品裁剪与依赖解析疑问

我当前使用自研的artifact,仅用到其约25%的功能,剩余75%包含大量代码与预分配内存。该库包含用作默认状态的static final实例(用于内存优化)等组件,这些组件会被其他项目大量使用。

库的部分类结构为索引/分类组件,示例代码如下:

class Utils {
   static class OfArrays {}
   static class OfCollections {}
}

还有基于继承关系的结构,示例:

class Parent {
   static class ClassToBeUsedInArtifact extends Parent {}
   static class IgnoredClass extends Parent {}
}

由于我使用的组件至关重要,我想知道能否将未使用部分从待发布的二进制制品中裁剪掉。若可通过javac配置或其他构建工具实现,我有以下核心顾虑:若从发布的二进制制品中裁剪依赖,当下游分支再次用到被裁剪的依赖时,下游依赖解析是否仍可行?

举个依赖结构的示例:

//Gradle keyword = `implementation` on all artifacts built.
SomeProject
   ├──(implementation) ArtifactC  (built with pruned ArtifactA and B)
   │            ├ (implementation)─ ArtifactB:1.0.0 
   │            └ (implementation)─ ArtifactA:1.0.0 
   ├──(implementation) ArtifactB:1.0.0 (built with pruned ArtifactA)
   │            └ (implementation)─ ArtifactA:1.0.1
   └──(implementation) ArtifactA:1.0.2 (full artifact)

若使用专门的二进制死代码裁剪构建工具,我想明确以下问题:

  • 编译器(标准或非标准)能否对所有ArtifactA实例执行依赖解析,使三者使用同一版本?(我推测会选择最新的ArtifactA:1.0.2)
  • SomeProject的编译器能否推断ArtifactC应使用外部ArtifactB,而非其内部的裁剪版本?
  • 我认为无需同时引入ArtifactC和ArtifactB即可使用ArtifactC,该观点是否正确?

另外,若使用更专业的强制内联与重排工具,是否会阻碍SomeProject的编译器跨制品执行依赖解析?


内容的提问来源于stack exchange,提问作者Delark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:26:03