Java: Son rapidos los “varargs”?

Fix=llamada a metodo de argumentos fijos
Var=llamada a metodo varargs
Dummy=La llamada solo devuelve false
Null=La llamada compara los parametros con null

Resultados:

checkDummyFix:	125ms
checkDummyVar:	4422ms
checkNullFix:	1735ms
checkNullVar:	5797ms

# java -version
java version “1.6.0_33”
Java(TM) SE Runtime Environment (build 1.6.0_33-b03)
Java HotSpot(TM) Client VM (build 20.8-b03, mixed mode, sharing)

El codigo de prueba:

public class TestVarArgs {
	private final static boolean checkDummyVar(final String... args) {
		return false;
	}
	private final static boolean checkDummyFix(final String a1, 
			final String a2, final String a3, final String a4, 
			final String a5, final String a6) {
		return false;
	}
	private final static boolean checkNullVar(final String... args) {
		for (final String v : args) {
			if (v == null) {
				return true;
			}
		}
		return false;
	}
	private final static boolean checkNullFix(final String a1, 
			final String a2, final String a3, final String a4, 
			final String a5, final String a6) {
		if (a1 == null) return true;
		if (a2 == null) return true;
		if (a3 == null) return true;
		if (a4 == null) return true;
		if (a5 == null) return true;
		if (a6 == null) return true;
		return false;
	}
	private static final long diff(final long ts) {
		return (System.currentTimeMillis() - ts);
	}
	public static void main(String[] args) {
		final int TOTAL = (int)200e6;
		final String s1 = "t1", s2 = "t2", s3 = "t3";
		final String s4 = "t2", s5 = "t5", s6 = "t6";
		long ts;

		System.gc();
		ts = System.currentTimeMillis();
		for (int i = 0; i < TOTAL; i++) {
			checkDummyFix(s1, s2, s3, s4, s5, s6);
		}
		System.err.println("checkDummyFix:\t" + diff(ts) + "ms");

		System.gc();
		ts = System.currentTimeMillis();
		for (int i = 0; i < TOTAL; i++) {
			checkDummyVar(s1, s2, s3, s4, s5, s6);
		}
		System.err.println("checkDummyVar:\t" + diff(ts) + "ms");

		System.gc();
		ts = System.currentTimeMillis();
		for (int i = 0; i < TOTAL; i++) {
			checkNullFix(s1, s2, s3, s4, s5, s6);
		}
		System.err.println("checkNullFix:\t" + diff(ts) + "ms");

		System.gc();
		ts = System.currentTimeMillis();
		for (int i = 0; i < TOTAL; i++) {
			checkNullVar(s1, s2, s3, s4, s5, s6);
		}
		System.err.println("checkNullVar:\t" + diff(ts) + "ms");
	}
}

Referencia:
varargs java 5

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: