java - page - pagina horizontal itext
¿Por qué necesita especificar el tamaño del montón de Java? (4)
Siempre me he preguntado, ¿por qué Java requiere que establezca el tamaño del montón manualmente? Tenía la impresión de que los programas escritos en otros idiomas solo asignarían tanta memoria como fuera necesario a medida que el programa se ejecutara hasta que el sistema operativo no pudiera asignar más.
En el mundo Java, necesitamos establecer el tamaño de pila, pila y permgen. Si bien esto es lo suficientemente simple, olvidarse de aumentarlos a números "lo suficientemente grandes" es la razón número 1 por la que he visto que los servidores se caen.
¿Por qué no es posible decirle a Java que haga crecer el montón / pila / permgen tanto como necesita con el tiempo?
Creo que porque la memoria real de la computadora es finita. Entonces, en cierto sentido, JVM te permite detectar los memleaks antes de que se desperdicie toda la memoria.
Además, ¿qué hacer si ejecuta varias JVM en la misma máquina? En este caso, ¿cómo permite que cada una de estas JVM crezca "tanto como sea necesario"?
Debido a que el crecimiento dinámico del tamaño de pila, pila y permgen solo haría que el servidor se caiga de todos modos. En un mundo así, el servidor eventualmente filtraría todos sus recursos.
Además, el desarrollo de la gestión automática de la memoria no era tan maduro como lo es hoy. Tener límites virtuales facilita las cosas si elige valores predeterminados incorrectos, pero puede hacer que la codificación sea un poco menos eficiente en el back-end.
Sí, estas son conjeturas, pero razonables; especialmente cuando se consideran los orígenes de Java / Oak de la programación incorporada de decodificador. No es como si un sistema incorporado tuviera memoria virtual intercambiada o respaldada por disco, ¿por qué hacer que la JVM actúe como si estuviera disponible?
Mi interpretación es que Sun es una compañía enfocada en la venta de Big Boxes y les gusta que los administradores de sistemas puedan hacer cosas en estas cajas. Ejecutar un sistema para llenar toda la memoria es una buena manera de ejecutarlo en el terreno y no poder realizar acciones de manera eficiente para restaurar la operación porque no puede asignar memoria para crear un shell de inicio de sesión, por ejemplo.
Tres razones:
- Porque Java fue pensado para ser un lenguaje para escribir aplicaciones web. En general, no se cree que sea una buena idea dejar que una aplicación web se haga cargo de todos los recursos de la máquina.
- Porque Java es basura recolectada. Además de especificar un límite superior de memoria, el tamaño de pila también activa la recolección de basura. Esencialmente estás diciendo "puedes usar esto mucho, pero cuando alcanzas ese límite tienes que poner orden".
- Hay muchas clases de aplicaciones en las que desea limitar la cantidad de memoria utilizada por el proceso de Java, por ejemplo, donde es más importante que otros procesos continúen cuando no hay suficiente memoria para ambas.
- Porque poder limitar el tamaño del montón es una característica . Si le gusta el enfoque en el que el proceso puede tener memoria ilimitada (como en los otros idiomas mencionados), siempre puede establecer que el límite de almacenamiento dinámico sea más de lo que podría adquirir. Si desea limitar el tamaño del montón, puede hacerlo. Otros idiomas tienen solo uno de esos comportamientos posibles, lo que los hace menos flexibles.