我发现了关于Scala bomb (like a zip bomb)
的问题我对同一个问题很感兴趣,但关于java
:
是否可以创建一个java源文件,在编译时, 产生大量的类文件(或非常大的单个类) 文件)?是否有任何方式类文件的大小可以增长得更快 与源文件的大小呈线性关系?
答案 0 :(得分:0)
有一些技巧。但是没有办法制作最好的炸弹。您可能需要运行挑战才能找到一些好的条目。
在 codegolf.se 上有类似的一个:Build a Compiler Bomb
用户@Sleafar显示了Java变体:Java, 450 + 22 = 472 bytes source, ~1GB class file
以下是他的代码的副本:
import java.io.Writer;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
@SupportedAnnotationTypes("java.lang.Override")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class B extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
if (annotations.size() > 0) {
try (Writer writer = processingEnv.getFiler().createSourceFile("C")
.openWriter()) {
writer.write("class C{int ");
for (int i = 0; i < 16380; ++i) {
for (int j = 0; j < 65500; ++j) {
writer.write("i");
}
writer.write(i + ";int ");
}
writer.write("i;}");
} catch (Exception e) {
}
}
return true;
}
}
如上所述,它使用Annotation Processors并需要两个编译过程:
javac B.java
javac -J-Xmx16G -processor B B.java
生成的类文件大约为1 GB
。
这个答案是社区维基,因为它只显示来自其他网站的另一个答案的副本。关闭投票是不合适的,因为在SO上没有类似的问题,它仍然是主题。