[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: ¥é¥Ã¥Ñ¡¼¥¯¥é¥¹¤ÎÇÛÎ󤫤é¥×¥ê¥ß¥Æ¥£¥Ö¤ÎÇÛÎó¤Ø¤Î¥³¥Ô¡¼








¤ß¤ä¤¶¤­¡÷ÅìÍξðÊó¡óÀèÆüÆþ²ñ¤·¤Þ¤·¤¿¡£¤è¤í¤·¤¯¤ª´ê¤¤¤·¤Þ¤¹(__)

ENDO Yasuyuki <yasuyuki@xxxxxxxxxx> wrote:
>ñ½ãÈÇ¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥óÈÇ¡¢JNIÈǤǡ¢
>¡ÖÇÛÎó¥³¥Ô¡¼¡¦¥Ù¥ó¥Á¥Þ¡¼¥¯Âç²ñ¡×¤âÌÌÇò¤¤µ¤¤¬¤·¤Þ¤¹¡£

¤³¤ó¤Ê¤Îºî¤Ã¤Æ¤ß¤Þ¤·¤¿(^^;(ËöÈø»²¾È)
¤«¤Ê¤ê¤¤¤¤²Ã¸º¤Ê¥Ù¥ó¥Á¥Þ¡¼¥¯¤â¤É¤­¤Ç¤¹¡£

¤³¤Î·ë²Ì¤Ï¼¡¤ÎÄ̤ê(JDK1.1.7A + NT4.0(P2¤Î333MHz))
-------
C:\JAVA\INTARRAY>java IntArrayBenchMark
Arrays.IntegersToIntArray:
110
WrapperArrayToPrimitiveArray:
6209
Int.toIntArray:
90

C:\JAVA\INTARRAY>java -nojit IntArrayBenchMark
Arrays.IntegersToIntArray:
381
WrapperArrayToPrimitiveArray:
7991
Int.toIntArray:
361
--------
Int.toIntArray¤¬°ìÈÖ®¤¯¡¢refrection¤òÍѤ¤¤¿¤â¤Î¤¬¡¢
¤«¤Ê¤êÃÙ¤¯¤Ê¤Ã¤Æ¤Þ¤¹(^^;

¤Þ¤À¹Í»¡¤ò¤·¤Æ¤Ê¤¤¤ó¤Ç¡¢¤È¤ê¤¢¤¨¤º·ë²Ì¤Î¤ß¤Ë¤Æ¡£
¤½¤ì¤Ç¤Ï¡£

//////////////////////////////////////////////////////////////////////
//ÅìÍξðÊó¥·¥¹¥Æ¥à¡¦¥ª¡¼¥×¥ó¥½¥ê¥å¡¼¥·¥ç¥ó»ö¶ÈÉô¥½¥ê¥å¡¼¥·¥ç¥ó±Ä¶ÈÉô
//                                 µÜºêÌ÷»Î   e-mail:soara@xxxxxxxxxx
//////////////////////////////////////////////////////////////////////

<< ¼Â¹Ô¥½¡¼¥¹ (IntArrayBenchMark.java) >>
import java.lang.reflect.Array;
import java.lang.reflect.Method;

public class IntArrayBenchMark {
  private IntArrayBenchMark() {}

  // ShinÈÇ
  static final Object
    WrapperArrayToPrimitiveArray(Object[] from, Class primitiveClass)
      throws Exception {
     String    toTypeName = primitiveClass.toString();
     // primitiveÇÛÎó¤ËPut¤¹¤ë¥á¥½¥Ã¥É¤Í
     String    setValueMethodName =
       "set" +
         toTypeName.substring(0, 1).toUpperCase() +
toTypeName.substring(1);
     Method    setValueMethod =
       Array.class.getMethod
         (setValueMethodName,
          new Class[]{ Object.class, int.class, primitiveClass });
     // PrimitiveTypeÇÛÎó¤ÎÀ¸À®
     Object to = Array.newInstance(primitiveClass, from.length);

     for (int i = 0; i < from.length; i++) {
       setValueMethod.invoke
         (from[i],
          new Object[]{to, new Integer(i), from[i]});
     }
     return to;
      }

  // ¥Ù¥ó¥Á¥Þ¡¼¥¯
  public static void main(String argv[]) throws Exception {
    // ¤Þ¤º¤Ï½àÈ÷
    final int INDEX = 100;
    final int LOOPS = 10000;
    {
      Integer intobjarray[] = new Integer[INDEX];
      for(int i = 0; i < INDEX; i++) {
     intobjarray[i] = new Integer(i);
      }
      {
     // ±óÆ£ÈǤ½¤Î1
     long now = System.currentTimeMillis();
     for(int i = 0; i < LOOPS; i++){
       int[] intarray = Arrays.IntegersToIntArray(intobjarray);
     }
     System.out.println("Arrays.IntegersToIntArray: ");
     System.out.println(System.currentTimeMillis() - now);
      }
      {
     // ShinÈÇ
     long now = System.currentTimeMillis();
     for(int i = 0; i < LOOPS; i++){
       int[] intarray =
         (int[])IntArrayBenchMark.WrapperArrayToPrimitiveArray
           (intobjarray, int.class);
     }
     System.out.println("WrapperArrayToPrimitiveArray: ");
     System.out.println(System.currentTimeMillis() - now);
      }
    }
    {
      Int intobjarray[] = new Int[INDEX];
      for(int i = 0; i < INDEX; i++) {
     intobjarray[i] = new Int(i);
      }
      {
     // ±óÆ£ÈǤ½¤Î2
     long now = System.currentTimeMillis();
     for(int i = 0; i < LOOPS; i++){
       int[] intarray = Int.toIntArray(intobjarray);
     }
     System.out.println("Int.toIntArray: ");
     System.out.println(System.currentTimeMillis() - now);
      }
    }
  }
}

// ±óÆ£ÈǤ½¤Î1
class Arrays {
  public static final int[] IntegersToIntArray(Integer[] integers) {
    int[] intarray = null;
    if (integers != null) {
      intarray = new int[integers.length];
      for (int i=0; i<integers.length; i++) {
     intarray[i] = integers[i].intValue();
      }
    }
    return intarray;
  }
}

// ±óÆ£ÈǤ½¤Î2
class Int {
  public int i;
  Int(int i) { this.i = i; }
  public static int[] toIntArray(Int[] ints) {
    int[] intarray = new int[ints.length]; // null¤Ë¤Ê¤Ã¤Æ¤¿(NullPointerEx)
    if (ints != null) {
      for (int n=0; n<ints.length; n++) {
     intarray[n] = ints[n].i;
      }
    }
    return intarray;
  }
}