[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;
}
}