2. @SuperSerch
• Desarrollando en Java desde
2001
• Participe en el desarrollo de
los productos OpenSource
WebBuilder,
SemanticWebBuilder y
Cloudino (ESP8266)
• Desarrollador en Bitso
4. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
5. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
• ¿Cuál es más rápido? Quick Sort o Buble Sort
6. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
• ¿Cuál es más rápido? Quick Sort o Buble Sort
• Depende
7. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
• ¿Cuál es más rápido? Quick Sort o Buble Sort
• Depende
• Quick Sort: O(n(log n)); Buble Sort: O(n^2)
8. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
• ¿Cuál es más rápido? Quick Sort o Buble Sort
• Depende
• Quick Sort: O(n(log n)); Buble Sort: O(n^2)
• Sólo 10 elementos
9. Problemas en una aplicación
Eligiendo el algoritmo correcto
• La forma en que diseñamos la solución, ¿es la más conveniente?
• ¿Cuál es más rápido? Quick Sort o Buble Sort
• Depende
• Quick Sort: O(n(log n)); Buble Sort: O(n^2)
• Sólo 10 elementos
• Tenemos un arreglo ordenado al que se le agregan elementos
10. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
11. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
• Poder de cómputo
12. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
• Poder de cómputo
• Acceso a Memoria
13. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
• Poder de cómputo
• Acceso a Memoria
• Cantidad de Memoria
14. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
• Poder de cómputo
• Acceso a Memoria
• Cantidad de Memoria
• Acceso a Disco
15. Problemas en una aplicación
¿Qué elemento es el que limita a mi aplicación?
• Poder de cómputo
• Acceso a Memoria
• Cantidad de Memoria
• Acceso a Disco
• Acceso a Red
17. JConsole
The Java Monitoring and Management Console
• Parte del JDK desde la versión
5
• Interface gráfica que se
puede conectar a JVMs
locales o remotos
• Provee datos de Memoria,
Hilos, Clases y acceso a los
MBeans
18. Visual VM
https://visualvm.github.io
• Herramienta Externa, que se
puede conectar a JVMs
locales y remotos
• Maneja información de
Memoria, hilos, threadDump,
profiling de memoria
• Extensible vía Plugins
19. Java Misson Control
https://www.azul.com/products/zulu-mission-control/
• Se puede conectar a un JVM local
o remoto
• Maneja información de Memoria,
hilos, histogramas y ThreadDumps
• Puede analizar grabaciones de
Java Flight Recorder
• Puede colocar triggers para
mandar alertas, realizar volcados
de memoria o iniciar grabaciones
cuando se cumplen condiciones
adversas
21. Memory leak
• Ocurre cuando no se eliminan
referencias fuertes a objetos
• Muy común al implementar
cache
• El live dataset se mantiene
creciendo
• Un System.gc() no puede
reducir el espacio de Old Gen
https://i1.wp.com/www.computition.net/wp-content/uploads/2018/01/
memory-leak-in-java.jpg
25. Deadlock
Dining philosophers
• Problema de sincronización
en concurrencia
• Ocurren cuando multiples
hilos bloquean acceso a
recursos en común
• El orden en el que se
adquieren los recursos es
clave
By Benjamin D. Esham / Wikimedia Commons, CC BY-SA
3.0, https://commons.wikimedia.org/w/index.php?
curid=56559
27. Creación de objetos
• Java tiene manejo “automático” de la memoria
• El costo de crear objetos
• El costo de envolver valores (Autoboxing)
• El costo de escoger la llave adecuada
• equals, hashcode, comparable
29. Ejemplo 1
• Creación de multiples objetos
de corta vida
• Mas de 4x tiempo
desperdiciado en crear
objetos
30. Ejemplo 2
• Diferencia entre long y Long
• Creación de objetos wrapper
para cada búsqueda
• El tiempo de creación de un
wrapper despreciable, pero
consume memoria
31. Ejemplo 3
• Usamos un objeto que
probablemente fue el mismo
al que se hace referencia en
la llave, no hay creación de
nuevos objetos
32. Eligiendo la llave adecuada para un Map
• HashMap tiene un número limitado de buckets
• Al tener una colisión en el hash para un bucket se inserta en el bucket
una lista, la cuál se tiene que recorrer cada vez que se buscan
elementos que caen en el mismo bucket
• En versiones recientes esta lista puede reemplazarse por un TreeSet
que convierte la búsqueda lineal en una búsqueda en un árbol
• Requiere que la llave no sólo tenga bien implementado equals y
hashcode, sino que sea Comparable