2009-07-23 9 views
24

Después de crear objetos de gran tamaño y de quedarse sin memoria RAM, voy a tratar de eliminar los objetos en mi entorno actual utilizandouso de la memoria en I

rm(list=ls()) 

Cuando compruebo mi uso de memoria RAM, nada ha cambiado. Incluso después de llamar al gc(), nada ha cambiado. Solo puedo reabastecer mi memoria RAM al salir de R.

¿Alguien tiene consejos para tratar objetos con memoria intensiva dentro de R?

Respuesta

19

La memoria para objetos eliminados no se libera inmediatamente. R usa una técnica llamada "recolección de basura" para reclamar memoria para objetos eliminados. Periódicamente, recorre la lista de objetos accesibles (básicamente, aquellos que tienen nombres y no han sido eliminados y, por lo tanto, puede acceder el usuario), y los "etiqueta" para su retención. La memoria para cualquier objeto no etiquetado se devuelve al sistema operativo después del barrido de recogida de basura.

La recolección de basura se realiza automáticamente y usted no tiene ningún control directo sobre este proceso. Pero puede forzar un barrido llamando al comando gc() desde la línea de comando.

Incluso entonces, en algunos sistemas operativos, la recolección de basura puede no reclamar la memoria (como informa el SO). Las versiones anteriores de Windows, por ejemplo, podrían aumentar pero no disminuir la huella de memoria de R. La recolección de basura solo haría espacio para nuevos objetos en el futuro, pero no reduciría el uso de memoria de R.

3

Mi impresión es que se prueban varias formas de gc() antes de que los informes R fallaran la asignación de memoria. No estoy al tanto de una solución para esto en este momento, aparte de reiniciar R como sugieres. Parece que R no defragmenta la memoria.

8

En Windows, la técnica que describes funciona para mí. Prueba el siguiente ejemplo.

Abra el Administrador de tareas de Windows (CTRL + MAYÚS + ESC).

Iniciar RGui. El uso de la memoria RGui.exe es 27 460K.

Tipo

gcinfo(TRUE) 
x <- rnorm(1e8) 

RGui.exe Uso de memoria es ahora 811 100K.

Tipo rm("x"). El uso de la memoria RGui.exe sigue siendo 811 100K.

Tipo gc(). El uso de la memoria RGui.exe ahora es 28 332K.

Tenga en cuenta que debe llamarse gc shoud automáticamente si ha eliminado objetos de su área de trabajo, y luego intenta asignar más memoria a las nuevas variables.

+0

Así es como se comporta en mi extremo. Estoy ejecutando R 2.8.1 en Windows XP. – ars