jueves, 9 de abril de 2020

Midiendo el rendimiento de rutinas

  2 comentarios

Estos días me ha tocado revisar código hecho por otros, y encontré un par de rutinas que me parecieron interesantes para revisar. Estas las publiqué en la cuenta de twitter:


He recibido respuestas interesantes.

Lo que publicaré en este post y en un vídeo es ver cuál es la rutina más rápida, en base a sus respuestas.

Validando que una lista no esté vacía

He creado una clase Utils con tres métodos que validará que una lista no esté vacía. La primera es la manera como encontré en el código, la segunda y la tercera es usando sus respuestas.

    public static boolean isValidListIf(List<?> list) {
        if (list != null) {
            if (list.size() > 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static boolean isValidListInline(List<?> list) {
        return list != null && !list.isEmpty();
    }

    public static boolean isValidListOptional(List<?> list) {
        return Optional.ofNullable(list).map((l) -> !l.isEmpty()).orElse(Boolean.FALSE);
    }

¿Cuál cree que es más rápido?

Validando que una cadena no esté vacía

Esta también es similar, solo que se asegura que no tenga espacios en blanco. Igual, tendremos tres métodos:
    public static boolean isValidStringIf(String str) {
        if (str != null) {
            if (str.trim().length() > 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static boolean isValidStringInLine(String str) {
        return str != null && !str.trim().isEmpty();
    }

    public static boolean isValidStringOption(String str) {
        return Optional.ofNullable(str).map(s -> !s.trim().isEmpty()).orElse(Boolean.FALSE);
    }

Vídeo

Aquí veremos el código en ejecución y veremos el resultado, además daremos un veredicto ¿cuál crees que es el resultado?


Código fuente

Aquí publico el código fuente para que también lo intentes y pruebas en tu máquina:

2 comentarios :

S8k! dijo...

Gracias por el artículo, ¿Pudieras actualizarlo pero ejecutando las pruebas con JMH?. JMH esta bastante bueno y tiene un API que permite configurar los tipos de pruebas. Yo lo estuve usando siguiendo lo documentado aquí http://tutorials.jenkov.com/java-performance/jmh.html

Diego Silva dijo...

Hola S8k!
De hecho, hace unos años hice una publicación usando lo que mencionas.

https://www.apuntesdejava.com/2015/12/midiendo-el-rendimiento-con-jmh-java.html