Компилятор JDK17 медленнее, чем компилятор JDK8JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Компилятор JDK17 медленнее, чем компилятор JDK8

Сообщение Гость »

Мне нужно скомпилировать несколько классов в моей программе, и кажется, что компилятор JDK 17 работает намного медленнее, чем компилятор JKD 8.
  • Система : Windows 11 (проверено на нескольких компьютерах)
  • JDK 17: 17.0.10
  • JDK 8: 1.8.0.333
  • В Linux проблем нет.
В каждой версии я использую встроенный компилятор JDK, вызывая ToolProvider.getSystemJavaCompiler(); и стандартный файловый менеджер, вызвав compiler.getStandardFileManager(..)
В моем реальном проекте эта разница может стать проблемой, поскольку мне приходится компилировать много гораздо более сложные классы.
Есть ли у кого-нибудь такая же проблема?
Есть идеи, что происходит?
В качестве теста у меня есть создал 10 очень простых классов (в основном bean-компоненты с примитивными переменными и методами set и get), для компиляции которых не нужны дополнительные классы или jar-файлы.
Я создал класс, который компилирует эти 10 bean-компонентов , используя цикл для компиляции каждого файла друг друга.
Общее время компиляции в JDK 17 примерно на 50 % выше, чем в JDK 8.
Я запускал этот тест много времени, с тем же результатом.
Вот пример вывода:
JDK 17 Compiling several classes using JavaCompiler directly
compiling Alpha.java=322 ms
compiling Beta.java=38 ms
compiling Delta.java=34 ms
compiling Epsilon.java=27 ms
compiling Gamma.java=27 ms
compiling Iota.java=25 ms
compiling Lambda.java=23 ms
compiling Phi.java=24 ms
compiling Pi.java=25 ms
compiling Zeta.java=19 ms
Total 564 ms

JDK 8 Compiling several classes using JavaCompiler directly
compiling Alpha.java=259 ms
compiling Beta.java=15 ms
compiling Delta.java=15 ms
compiling Epsilon.java=14 ms
compiling Gamma.java=15 ms
compiling Iota.java=12 ms
compiling Lambda.java=11 ms
compiling Phi.java=13 ms
compiling Pi.java=11 ms
compiling Zeta.java=13 ms
Total 378 ms

Мой тестовый класс:
public class CompileTest {

public void doCompile() {
FilenameFilter ff = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".java");
}
};
System.err.println();
System.err.println("JDK 8 Compiling several classes using JavaCompiler directly");
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager=compiler.getStandardFileManager(null, Locale.getDefault(), Charset.forName("ISO-8859-1"));
try {
String sourceDir = "";
String[] classes = new File(sourceDir).list(ff);
long total = 0;
for (int i = 0; i < classes.length; i++) {
String path = sourceDir+"\\"+classes;
long t0 = System.currentTimeMillis();
compile(compiler, fileManager, path);
t0 = (System.currentTimeMillis()-t0);
System.err.println("\tcompiling "+classes+"="+t0+" ms");
total+=t0;
}
System.err.println("Total "+total+" ms");
} catch (Exception e) {
e.printStackTrace();
}
System.err.println();
}
private boolean compile(JavaCompiler compiler, StandardJavaFileManager fileManager, String toCompile) {
long t0;
List plist = new ArrayList();
PrintWriter pw=new PrintWriter(System.out);
File javaFile = new File(toCompile);
Iterable fileObjects=fileManager.getJavaFileObjects(javaFile);
boolean ret=compiler.getTask(pw, fileManager, null, plist, null, fileObjects).call();
return ret;
}

public static void main(String[] args) {
CompileTest ct = new CompileTest();
ct.doCompile();
}

}


Подробнее здесь: https://stackoverflow.com/questions/781 ... 8-compiler
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»