ã¯ããã«
ãJavaããã°ã©ãã³ã°è¨èªã®åæã®ãããããJavaã¯ã¤ã³ã¿ã¼ããªã¿è¨èªãªã®ã§ããã©ã¼ãã³ã¹ã®ç¹ã§CãC++ã«å£ããã¨ä¸»å¼µãã¦ãã人ãã¡ããã¾ããããã¡ãããC++ã®ä¿¡å¥è ãã¡ã¯ãããããJavaããçã®ãè¨èªã ã¨æã£ã¦ããªãã§ãããããJavaã®é£ä¸ã¯C++ããã°ã©ãã«åãã£ã¦ãã¤ããä¸åº¦æ¸ãã°ãã©ãã§ãå®è¡ã§ãããã¨å±ãã¦ãã¾ãã
ãã¾ãéè¦ãªãã¨ããåãä¸ãã¾ããããJavaã¯åºæ¬çãªæ´æ°æ¼ç®ãã©ãã»ã©ãã¾ããã£ã¦ã®ããã§ãããããç§ã誰ãã«ã2×3ã¯ï¼ãã¨å°ããããããããããã«çãè¿ã£ã¦ãããã¨ã§ããããã§ã¯ãç¸æãããã°ã©ã ãªãã©ããªãã§ãããããããã調ã¹ãããã«ãåºæ¬çãªãã¹ããè¡ã£ã¦ã¿ã¾ãããããã¹ãã®å 容ã¯æ¬¡ã®ã¨ããã§ãã
- æåã«Xåã®ã©ã³ãã ãªæ´æ°ãçæãã
- ãããã®æ°ã«ã2ããYã¾ã§ã®ãã¹ã¦ã®æ°ãæãã
- å ¨ä½éåã®è¨ç®ã«è¦ããæéãè¨ç®ãã
ãä¹±æ°ã®çæã«è¦ããæéãç¥ãããããã§ã¯ãªãã®ã§ã測å®ãå§ããåã«ä¹±æ°ãçæãã¦ãããã¨ã大äºã§ãã
Javaã®ãã¹ã
ãJavaã§ã¯ãããç°¡åã«ä¹±æ°ãçæã§ãã¾ãã
private void generateRandoms() { randoms = new int[N_GENERATED]; for( int i = 0; i < N_GENERATED; i++) { randoms[i] = (int)(i * Math.random()); } }
ãåæ§ã«ãè¨ç®å¦çãç°¡åã§ãã
private void javaCompute() { int result = 0; for(int i = 2; i < N_MULTIPLY; i++) { for( int j = 0; j < N_GENERATED; j++ ) { result = randoms[j] * i; result++; } } }
ãä¸è¨ã®javaCompute
ã¡ã½ããã®å®è¡ã«è¦ããæéãåç´ã«æ¸¬å®ããããããã¹ãçµæã¨è¦ãªããã¨ãã§ãã¾ããããããããã¯ããã¤ãã®çç±ã§å
¬æ£ã§ã¯ããã¾ããã第ä¸ã«ãJVMã¯ããã°ã©ã ã®å®è¡ä¸ã«å¿
è¦ã«å¿ãã¦ã¯ã©ã¹ãã¼ãã¼ã§ã¯ã©ã¹ããã¼ããã¾ããOSèªèº«ããJVMããè¦æ±ããããã¾ãã¾ãªãã¼ã¿æ§é ã«ã¤ãã¦ã®æºåãè¡ãã¾ãããã®ãããä¸è¨ã®é¢æ°ãæåã«å®è¡ããã¨ãã¯ãå®éã«ã¯å®è¡ã®æºåã«ããªãã®æéãè²»ããããã¨èãããã¾ããå¾ã£ã¦ã1åã®ãã¹ãã§æéã測å®ããã®ã¯ä¸é©å½ã§ãããã
ã代ããã«ããã®ããã°ã©ã ãä½åãå®è¡ãã¦ãçµæã®å¹³åãã¨ããã¨ã«ãã¾ãããããã ããé¢æ°ã®ååå®è¡æã«ã¯ãå®è¡æéã®ç¹ã§ãã¯ãåãåé¡ãçããã®ã§ãæ£ç¢ºãªæé測å®ãã§ãã¾ããããã®ä¸æ¹ã§ãä¸è¨ã®ã¡ã½ããã®å®è¡ãç¹°ãè¿ãã»ã©ãJVMãOSã«ãã£ã¦ãã¼ã¿ããã£ãã·ã¥ãããå¯è½æ§ãé«ããªãã¾ãããã®ãããæ£ç¢ºãªå®è¡æéãåæ ãããã¼ã¿ã§ã¯ãªããOSã«ããã³ã¼ãå®è¡æé©åã®çµæãåæ ãããã¼ã¿ãä¸é¨ã«å«ã¾ãã¦ãã¾ãå¯è½æ§ãããããã¯ãå¹³åå¤ã®ç®åºã«å½±é¿ãåºã¾ãã
ãããããåé¡ãç¸æ®ºãããããä¸è¨ã®ã¡ã½ãããæ°åå®è¡ãããæãç°å¸¸ãªãã±ã¼ã¹ãããªãã¡æçæéã¨æé·æéãé¤å¤ãã¾ããããããã°ãçã®å¹³åã«è¿ãå¤ãå¾ãããã¯ãã§ããããã«ãä¸è¨ã®javaCompute
ã¡ã½ãããå®è¡ããåæéã®é·ããé
åã«æ ¼ç´ãããã®ã¨ãã¾ããããããã¯æ¬¡ã®ãããªåç´ãªã¡ã½ããã§å®ç¾ããã¾ãã
private static long testTime( long diffs[] ) { long shortest = Long.MAX_VALUE; long longest = 0; long total = 0; for( int i = 0; i < diffs.length; i++ ) { if( shortest > diffs[i] ) shortest = diffs[i]; if( longest < diffs[i] ) longest = diffs[i]; total += diffs[i]; } total -= shortest; total -= longest; total /= ( diffs.length - 2 ); return total; }
ããããå ¨é¨ã¾ã¨ããã¨ã次ã®ã³ã¼ããã§ããããã¾ãï¼ãã®ã³ã¼ãã¯IntMaths.javaã«ãå ¥ã£ã¦ãã¾ãï¼ã
public static void main(String[] args) { IntMaths maths = new IntMaths(); maths.generateRandoms(); //compute in Java long timeJava[] = new long[N_ITERATIONS]; long start, end; for( int i = 0; i < N_ITERATIONS; i++ ) { start = System.currentTimeMillis(); maths.javaCompute(); end = System.currentTimeMillis(); timeJava[i] = (end - start); } System.out.println( "Java computing took " + testTime(timeJava) ); }
ãããã§ã¯æéãããªç§åä½ã§æ¸¬å®ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
ãçè ã®ã©ãããããï¼ããã»ã©ãã¤ã¹ããã¯ã§ã¯ãªããã®ã®ãç¾å¨ã®ä¸è¬çãªãã·ã³ã代表ãããã®ã¨è¦ã¦ããã§ãããï¼ã§ä¸è¨ã®ã³ã¼ããå®è¡ããã¨ãå¹³åå¤ãç´25ããªç§ã«ãªãã¾ããã¤ã¾ããçè ã®ã©ãããããã§ã¯ã10,000åã®ã©ã³ãã ãªæ´æ°ã¨2ãã1,000ã¾ã§ã®åæ°ã¨ãæãåãããã®ã«ãç´25ããªç§ãããã¨ãããã¨ã§ããããã¯åºæ¬çã«ãç´10,000,000åã®æ´æ°æ¼ç®ã«25msããããã¨ãæå³ãã¾ãã