Nueva etapa

La semana pasada fue mi última semana en Nextail, la que ha sido mi casa durante los dos últimos años y medio.

Como en la mayoría de las startups el tiempo pasa volando, pero al echar la vista atrás parece que fue hace mucho tiempo aquel día que entré en esa sala de 40 m2 en el Eurobuilding que hacía de oficina.

En este tiempo he crecido personal y profesionalmente, y creo haber ayudado a crecer a la compañía, pero había llegado a un punto en el que el valor añadido que yo podía aportar ya no era diferenciador.

Leer más...
La piedra

Esta semana pasada he estado revisando el rendimiento de ciertos procesos intensivos en CPU que tenemos en Nextail. La funcionalidad de profiling de Java Flight Recorder y Java Mission Control se han convertido en mi martillo en estos casos.

Cada vez que lo uso caigo en el mismo error, así que he decidido escribir un post para ver si no tropiezo con la misma piedra la próxima vez.

Leer más...
Cosas de Mapas

Al Construir la librería Bikey, para hacer que fuera lo más fácil y natural de usar para cualquier programador con experiencia en Java, intenté que el API siguiera los mismos patrones y semánticas que la librería de Collecciones de Java. Para eso estudié y repliqué el comportamiento (e incluso Javadoc) del API de Map.

Al hacerlo, me di cuenta de una cosa de la que no era consciente (o nunca me había planteado): los métodos Collection<V> values(), Set<K> keySet(), y Set<Map.Entry<K,​V>> entrySet() devuelven vistas del mapa:

Leer más...
Bikey

TL;DR: en este post os presento Bikey una librería de colecciones de Java para crear Maps y Sets cuyos elementos tienen dos claves, consumiendo desde un 70%-85% a un 99% menos de memoria que con estructuras de datos habituales. Es Open Source, publicada en https://github.com/jerolba/bikey y está disponible en Maven Central.

En dos de mis últimos artículos hablando sobre HashMaps planteaba los problemas que hay cuando gestionamos información referenciada con una clave formada por dos valores: Map<Pair<K1, K2>, V>. Si analizamos las opciones disponibles vemos que el consumo por unidad de información es relativamente elevada.

¿Por qué se consume tanta memoria si el 60% de la información está repetida?.

¿Hay alguna librería que implemente mapas y sets con clave compuesta de forma eficiente? Yo no la he encontrado.

Leer más...
Midiendo el uso real de memoria: JMnemohistosyne

TL;DR: en este post os presento JMnemohistosyne una pequeña utilidad para calcular el histograma de clases con la memoria consumida en una sección de código.

En mis dos últimos artículos tenía una especial preocupación por conocer cuál era el consumo de memoria de algunas estructuras de datos y cómo se distribuía el espacio ocupado entre las distintas clases que las forman.

En mi caso concreto, dado un fragmento de código necesitaba averiguar:

  • ¿Cuánta memoria han consumido los objetos que se han instanciado y quedan residentes en memoria?
  • ¿Cuántas instancias de cada clase existen?
  • ¿Cuánta memoria consumen?
Leer más...