Почему мое приложение работает быстрее в IntelliJ по сравнению с командной строкой?

У нас есть приложение, которое импортирует большое количество файлов, разделяя и сортируя данные. При запуске тестового примера JUnit весь процесс занимает около 16 минут .

Тот же тест, выполненный с помощью mvn clean test -Dtest = MyTest запускается за 34 минуты .

Мы звоним в / bin / sort , чтобы отсортировать файлы. Сортировка, похоже, занимает больше времени. Я не понимаю, в чем разница.

Глядя на IntelliJ, он работает с

/Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 -Didea.launcher.bin.path=/Applications/IntelliJ IDEA 10.app/bin -Dfile.encoding=UTF-8 -classpath %classhpath% com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 xxx.IntTestImportProcess,testImportProcess

Я использую OS X. Все классы внедряются с использованием Spring. Каковы возможные предположения или теории о том, что стоит за этим увеличением производительности в IntelliJ? Тесты идентичны. Я не могу поделиться всем кодом, потому что их очень много. Но я могу добавить любую деталь, если потребуется.

Вот мой основной класс и то, как я управляю обоими.

public static void main(String... args) throws IOException {
        if(args.length != 2) {
            System.out.println("Usage: \n  java -jar client.jar spring.xml data_file");
            System.exit(1);
        }
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext(args[0]);
        PeriodFormatter formatter = new PeriodFormatterBuilder()
                .appendMinutes()
                .appendSuffix("minute", "minutes")
                .appendSeparator(" and ")
                .appendSeconds()
                .appendSuffix("second", "seconds")
                .toFormatter();
        URI output = (URI) applicationContext.getBean("workingDirectory");
        File dir = new File(output);
        if(dir.exists()) {
            Files.deleteDirectoryContents(dir.getCanonicalFile());
        }
        else {
            dir.mkdirs();
        }
        ImportProcess importProcess = applicationContext.getBean(ImportProcess.class);
        long start = System.currentTimeMillis();
        File file = new File(args[1]);
        importProcess.beginImport(file);
        Period period = new Period(System.currentTimeMillis() - start); // in milliseconds
        System.out.println(formatter.print(period.toPeriod()));
    }

Я решил удалить JUnit и просто использовать метод main (). Результат точно такой же. IntelliJ снова. Вот сумасшедший журнал.

С IntelliJ

DEBUG [ main] 2011-08-18 13:05:16,259 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/usage]
DEBUG [ main] 2011-08-18 13:06:09,546 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/customer]

С java -jar

DEBUG [ main] 2011-08-18 12:10:16,726 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/usage]
DEBUG [ main] 2011-08-18 12:15:55,893 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/customer]

Команда сортировки

sort -t'    ' -f -k32,32f -k18,18f -k1,1n

Как вы можете видеть выше, сортировка в Intellij занимает 1 минуту , но в java -jar занимает 5 минут !

Обновление

Я запускал все, используя /Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java и все еще сортировку занимает более 5+ минут.

13
задан Amir Raminfar 18 August 2011 в 17:31
поделиться