हमारे पास एक ऐसा एप्लिकेशन है जो डेटा को विभाजित करके और इसे सॉर्ट करके बड़ी मात्रा में फ़ाइलों को आयात करता है। जुनीट टेस्ट केस चलाते समय, पूरी प्रक्रिया में 16 मिनट लगता है।कमांड लाइन की तुलना में इंटेलिजे में मेरा एप्लिकेशन तेजी से क्यों चल रहा है?
mvn clean test -Dtest=MyTest
के साथ किया गया परीक्षण, 34 मिनट में चलाया गया।
हम फ़ाइलों को सॉर्ट करने के लिए /bin/sort
पर कॉल कर रहे हैं। ऐसा लगता है कि इस तरह का समय लगता है। मुझे समझ में नहीं आता कि क्या अलग है।
इंटेलीजे को देखते हुए यह
/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
साथ समाप्त होने पर मुझे ओएस एक्स सभी वर्गों वसंत का उपयोग कर इंजेक्ट किया जाता पर कर रहा हूँ। 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 फिर से है। पागल लॉग यहाँ है।
इंटेलीजे साथ
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]
जावा जार
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 मिनट लग साथ
लेकिन जावा -जर में 5 मिनट!
अद्यतन
मैं /Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java
का उपयोग कर सब कुछ भाग गया और छंटाई अभी भी 5 + अच्छी तरह से मिनट लगते हैं।
जो जावा स्थापना कमांड लाइन 'जावा'' और' जावैक' 'बिंदु करते हैं? –
इंटेलिजे के तहत यह तेजी से नहीं चल रहा है, यह मेवेन के नीचे धीमा चल रहा है! क्या आप कच्चे 'जावा' आमंत्रण के रूप में इसे चलाने का प्रयास कर सकते हैं? –
@hircus/usr/bin/java ->/सिस्टम/लाइब्रेरी/फ़्रेमवर्क/javaVM.framework/Versions/Current/Commands/java और वर्तमान ए के लिए सिम्लिंक है। मुझे नहीं पता कि ए –