2012-04-19 11 views
7

En Internet Explorer podemos forzar la recolección de basura Javascript para que se ejecute con este método: CollectGarbage();¿Hay alguna forma de forzar al recopilador de basura de JavaScript en los navegadores basados ​​en webkit?

Ese método no está definido en Firefox. ¿Sabes si hay algún tipo de equivalente?

Gracias.

+1

¿Qué problema estás tratando de resolver realmente? La recolección de basura se realiza de manera automática tan pronto como su subproceso JS termine su secuencia actual de ejecución. ¿Por qué crees que necesitas ejecutar la recolección de basura explícitamente? – jfriend00

+0

Lo mismo que jfriend00, y has etiquetado esto como [pérdidas de memoria], ¿estás tratando de encontrar pérdidas de memoria? ¿Cuál es el problema real que necesita resolver? –

+1

hola, mi problema es que tengo un juego HTML5 que genera mucha basura, y me gustaría llamar al GC en situaciones controladas (como menú de pausa) – xus

Respuesta

-2

try Chrome: si lo ejecuta desde una línea de comandos/terminal con --js-flags = "- expose-gc", entonces proporciona window.gc(). Firefox Creo que requiere hacer clic en los botones "Memoria libre" en acerca de: memoria. Opera tiene window.opera.collect(). Edge tiene ventana.ColgarGarbage(). Safari, desconocido.

+0

gracias, ¿esto es compatible oficialmente con los estándares de JavaScript? – xus

+4

No funciona en FF y Chrome. – schlingel

+0

[enlace] http: // ed-multimedia.com/2011/04/04/javascript-memory-leak/este es el sitio de referencia –

1

He estado tratando de forzar GC y parece que independientemente del navegador real relativamente buena manera de hacerlo es ejecutar siguiente fragmento de código:

function gc(max) { 
    var arr = []; 
    for (var i = 0; i < max; i++) { 
     arr.push(i); 
    } 
    return arr.length; 
    } 
    for (var i = 0; ; i++) { 
    // repeat until you have enough: 
    gc(Math.pow(2, i)); 
    } 

Por supuesto, es una cuestión de Sepa cuándo dejar de llamar a gc (...): para eso se necesita una forma externa para detectar que el GC ha terminado exitosamente. En mi caso, estaba usando WebView incorporado y realmente pude comprobar antes de forzar la próxima ronda con una matriz más grande.

1

No estoy seguro de si esto no está fuera de tema pero hay un complemento para Firefox llamado FreeMemory (https://addons.mozilla.org/en-US/firefox/addon/freememory/) para ejecutar recolección de basura o ciclo sin visitar sobre: ​​panel de memoria, con temporizador configurable. Creo que hay alternativas para otros navegadores.

1

Visita about:memory.

de la página documentation on MDN: Cromo

about:memory is a special page within Firefox that lets you view, save, 
load, and diff detailed measurements of Firefox's memory usage. It also 
lets you do other memory-related operations like trigger GC and CC 
2

(No sólo la limitación de esta respuesta a los navegadores basados ​​en WebKit ...)

  • : si se lanza desde una línea de comandos/terminal con --js-flags="--expose-gc" , luego proporciona window.gc().
  • Firefox Creo que requiere hacer clic en los botones "Memoria libre" en about:memory.
  • Opera tiene window.opera.collect().
  • Edge tiene window.CollectGarbage().
  • Safari, desconocido.

Tenga en cuenta que usted no debe ser manualmente ejecutando el GC. Solo he publicado esto porque es útil para pruebas de desarrollo.

Cuestiones relacionadas