2009-07-23 9 views
24

Après avoir créé des objets volumineux et à court de RAM, je vais essayer de supprimer les objets dans mon environnement actuel à l'aideUtilisation de la mémoire dans la R

rm(list=ls()) 

Quand je vérifie mon utilisation de la RAM, rien n'a changé. Même après avoir appelé gc() rien n'a changé. Je peux seulement reconstituer ma RAM en quittant R.

Quelqu'un at-il des conseils pour traiter des objets à forte intensité de mémoire dans R?

Répondre

19

La mémoire pour les objets supprimés n'est pas libérée immédiatement. R utilise une technique appelée "garbage collection" pour récupérer de la mémoire pour les objets supprimés. Périodiquement, il parcourt la liste des objets accessibles (essentiellement, ceux qui ont des noms et n'ont pas été supprimés et peuvent donc être consultés par l'utilisateur), et les "balise" pour les conserver. La mémoire pour tous les objets non étiquetés est renvoyée au système d'exploitation après le balayage de récupération de place.

La collecte des ordures se fait automatiquement et vous n'avez aucun contrôle direct sur ce processus. Mais vous pouvez forcer un balayage en appelant la commande gc() à partir de la ligne de commande. Même dans ce cas, sur certains systèmes d'exploitation, la récupération de place peut ne pas récupérer la mémoire (comme indiqué par le système d'exploitation). Les anciennes versions de Windows, par exemple, pourraient augmenter mais pas diminuer l'empreinte mémoire de R. La collection Garbage ne ferait que faire de la place pour de nouveaux objets mais ne réduirait pas l'utilisation de la mémoire de R.

3

Mon impression est que plusieurs formes de gc() sont essayées avant que les rapports R échouent l'allocation de mémoire. Je ne suis pas au courant d'une solution pour cela pour le moment, hormis le redémarrage de R comme vous le suggérez. Il semble que R ne défragmente pas la mémoire.

8

Sur Windows, la technique que vous décrivez fonctionne pour moi. Essayez l'exemple suivant.

Ouvrez le Gestionnaire des tâches Windows (CTRL + MAJ + ÉCHAP).

Démarrez RGui. L'utilisation de RGui.exe mem est 27 460K.

type

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

RGui.exe mem utilisation est maintenant 811 100K.

Type rm("x"). L'utilisation de RGui.exe mem est toujours 811 100K.

Type gc(). L'utilisation de RGui.exe mem est maintenant de 28 332K.

Notez que gc doit être appelé automatiquement si vous avez supprimé des objets de votre espace de travail, puis vous essayez d'allouer plus de mémoire à de nouvelles variables.

+0

de ma part. Je cours R 2.8.1 sur Windows XP. – ars

Questions connexes