Su colega no tiene idea de qué están hablando.
Su operación más cara sería escucharlos . Perdieron su tiempo dirigiéndolo erróneamente a información que está más de una década desactualizada (a partir de la fecha original en que se publicó esta respuesta) , así como a que tuvo que pasar tiempo publicando aquí e investigando la verdad en Internet.
Afortunadamente, solo están ignorando regurgitando algo que escucharon o leyeron hace más de una década y no saben nada mejor. Tomaría cualquier otra cosa que digan como sospechosa también, esta debería ser una falacia bien conocida por cualquiera que se mantenga actualizado de cualquier manera.
Todo es un objeto (excepto primitives
)
Todo lo que no sean primitivas ( int, long, double
, etc.) son objetos en Java. No hay forma de evitar la creación de objetos en Java.
La creación de objetos en Java debido a sus estrategias de asignación de memoria es más rápida que C ++ en la mayoría de los casos y para todos los propósitos prácticos en comparación con todo lo demás en la JVM puede considerarse "libre" .
A principios de la década de 1990, a principios de la década de 2000, las implementaciones de JVM tenían cierta sobrecarga de rendimiento en la asignación real de objetos. Este no ha sido el caso desde al menos 2005.
Si sintoniza -Xms
para admitir toda la memoria que necesita para que su aplicación se ejecute correctamente, es posible que el GC nunca tenga que ejecutarse y barrer la mayor parte de la basura en las implementaciones modernas del GC, los programas de corta duración nunca pueden funcionar.
No intenta maximizar el espacio libre, que de todos modos es un arenque rojo, maximiza el rendimiento del tiempo de ejecución. Si eso significa que el JVM Heap está casi 100% asignado todo el tiempo, que así sea. La memoria de almacenamiento dinámico de JVM gratis no te da nada solo estar allí sentado de todos modos.
Existe la idea errónea de que el GC liberará la memoria al resto del sistema de una manera útil, ¡esto es completamente falso!
El montón de JVM no crece ni se contrae, de modo que el resto del sistema se ve afectado positivamente por la memoria libre en el montón de JVM . -Xms
asigna TODO lo que se especifica al inicio y su característica heurística es que nunca volverá a liberar nada de esa memoria al SO para compartirla con ningún otro proceso del SO hasta que esa instancia de la JVM se cierre por completo. -Xms=1GB -Xmx=1GB
asigna 1 GB de RAM independientemente de cuántos objetos se creen realmente en un momento dado. Hay algunas configuraciones que permiten liberar porcentajes de la memoria de almacenamiento dinámico, pero a todos los efectos prácticos, la JVM nunca puede liberar suficiente memoria para que esto suceda.así que ningún otro proceso puede recuperar esta memoria, por lo que el resto del sistema tampoco se beneficia de que JVM Heap sea libre. Un RFE para esto fue "aceptado" el 29-NOV-2006, pero nunca se ha hecho nada al respecto. Este comportamiento no es considerado una preocupación por nadie de autoridad.
Existe la idea errónea de que la creación de muchos objetos pequeños de corta duración hace que la JVM haga una pausa durante largos períodos de tiempo, esto ahora también es falso
Los algoritmos actuales de GC están realmente optimizados para crear muchos objetos pequeños de corta duración, que es básicamente el 99% heurístico para objetos Java en cada programa. Los intentos de Agrupación de objetos en realidad harán que la JVM funcione peor en la mayoría de los casos.
Los únicos objetos que necesitan agruparse hoy son objetos que se refieren a recursos finitos que son externos a la JVM; Sockets, archivos, conexiones de bases de datos, etc. y se pueden reutilizar. Los objetos normales no se pueden agrupar en el mismo sentido que en los idiomas que le permiten acceder directamente a ubicaciones de memoria. El almacenamiento en caché de objetos es un concepto diferente y puede o no ser lo que algunas personas ingenuamente llaman agrupación , los dos conceptos no son lo mismo y no deben combinarse.
Los algoritmos de GC modernos no tienen este problema porque no se desasignan en un horario, se desasignan cuando se necesita memoria libre en una determinada generación. Si el montón es lo suficientemente grande, entonces no se producen desasignaciones el tiempo suficiente como para causar pausas.
Los lenguajes dinámicos orientados a objetos están superando a C incluso hoy en día en pruebas sensibles al cálculo.