Depende del sistema operativo, el entorno de tiempo de ejecución y el diseño de la aplicación.
La aplicación necesita asignar memoria para cualquier ventana de documento. El enfoque razonable para esto es asignar dinámicamente un bloque de memoria llamando a las API del sistema. Y cuando ya no necesite esa memoria, puede descartarla. Las API del sistema se llamarán para “reciclar” la memoria previamente asignada, y será reclamada por el sistema y teóricamente puede ser utilizada por otras aplicaciones.
Sin embargo, hay varias excepciones:
- ¿Qué es más importante para computación pesada, RAM o CPU?
- ¿Cómo funciona la memoria RAM con el sistema operativo?
- ¿Qué tan importante es la velocidad de RAM para fps?
- No puedo entender el paso de fusión de tipo externo. ¿Cómo puedo ordenar 1 GB de datos en disco en 100 MB de RAM?
- ¿Puedo ahorrar dinero comprando una computadora portátil sin SSD y agregándola? Tengo la misma pregunta para otros componentes que se actualizan fácilmente como RAM, etc.
- Es posible que el sistema operativo no marque la memoria liberada como “libre” de inmediato. En algunos sistemas operativos, se marcará como inactivo y solo se reclamará cuando se quede sin memoria libre.
- Es posible que el entorno de tiempo de ejecución con mecanismo de recolección de basura no llame a las API del sistema para liberar el bloque de memoria inmediatamente cuando lo descarta. La recolección de basura generalmente se ejecuta en un subproceso paralelo del entorno de tiempo de ejecución y tardaría un tiempo en activarse; a menos que su aplicación fuerce el tiempo de ejecución a hacerlo de inmediato, como el método
System.gc()
en Java. - NO es necesario que la aplicación / tiempo de ejecución deba llamar a las API del sistema después de descartar el bloque de memoria. La memoria descartada puede ser preservada por la aplicación misma. La próxima vez que necesite asignar memoria nuevamente, primero usará la memoria asignada anteriormente para aumentar el rendimiento. Casi todas las implementaciones salidas del contenedor de datos C ++ STL tienen un mecanismo incorporado que algunos programadores experimentados ni siquiera lo sabían.
Entonces, si la memoria asignada se puede “liberar” depende de muchas cosas.