Si está buscando un rendimiento puro del servidor, los idiomas interpretados y dinámicos funcionan mucho mejor que los idiomas con su propia administración de memoria, si está ejecutando cualquier carga de trabajo de múltiples inquilinos en la nube; Esa es una respuesta compleja, así que déjame explicarte.
Las aplicaciones web Java / JVM solían funcionar bien cuando se ejecutaban en metal desnudo. Una vez que comienza a ejecutar aplicaciones en la nube pública, esencialmente se está ejecutando sobre un hipervisor (Xen para Amazon / VMware en otros lugares). El problema con los hipervisores es que toman la gestión de la memoria en sus propias manos para que las máquinas virtuales se ejecuten encima de ellos: los globos de memoria, la compresión de páginas, etc., son técnicas utilizadas por Hypervisor para ejecutar efectivamente las máquinas virtuales sobre HYpervisor. Ahora, si esta VM tiene una JVM, entonces JVM también tiene varios mecanismos para administrar su montón (mecanismos de marca y barrido GC); JVM e Hypervisor generalmente no funcionan bien juntos y causan políticas de reserva de memoria en conflicto en un servidor altamente cargado: la JVM intenta cargar todas las páginas para marcar las del GC, mientras que el Hypervisor podría haber vaciado las páginas para asignarlas a otro VM.
Esto da como resultado un bloqueo de la aplicación y un bajo rendimiento. Netflix tuvo la misma experiencia con instancias EC2 pequeñas / micro, debido a que migraron a instancias EC2 muy grandes en las que están casi garantizados que son la única VM en la parte superior del metal desnudo. Esto les permite escapar de CapEX, mientras les da un control completo sobre la máquina.
- ¿Qué es Amazon Web Services (AWS)?
- Si desea elegir una plataforma en la nube (AWS, GCP, Azure) hoy, ¿cuál sería la mejor?
- ¿Cuál es la diferencia entre la distribución de Mirantis y Red Hat para OpenStack?
- ¿Cómo cambiará el cerebro a medida que subcontratemos más cómputo y almacenamiento a la nube?
- ¿Cuáles son las principales diferencias tecnológicas y de precios entre Box (empresa) y Dropbox (producto) para productos comerciales?
VMware ha comenzado un proyecto Elastic Memory for Java (EM4J) por la misma razón.
De hecho, todas las bases de datos sobre VM tienen un 10% menos de rendimiento que en metal desnudo.
En pocas palabras, use Java cuando pueda estar seguro de que cuando JVM requiere 4GB, realmente tiene 4GB. Cualquier entorno que haga que la JVM piense que tiene 4 GB, cuando realmente solo tiene 2 GB debajo, causará problemas de rendimiento de la aplicación.