2010-04-14 14 views
6

Acabo de reiniciar mi navegador web firefox nuevamente porque comenzó a tartamudear y a disminuir la velocidad. Esto sucede cada dos días debido a (mi comprensión) del uso excesivo de memoria. Me he dado cuenta de que toma 40M cuando se inicia y luego, en el momento en que noto que desacelera, pasa a 1G y mi máquina no tiene nada más para ofrecer a menos que cierre otras aplicaciones. Estoy tratando de entender las razones técnicas detrás de por qué es un problema tan difícil de resolver ve.Uso de memoria alta para dummys

Mozilla tiene una página sobre uso de memoria alta:

http://support.mozilla.com/en-US/kb/High+memory+usage

Pero yo estoy buscando un poco más en profundidad y una explicación satisfactoria. No es muy técnico, pero es suficiente para darle más respeto al tema y complacer a la multitud aquí.

Algunas preguntas que ya estoy pensando (que podría ser tonto por lo tome con calma):

  • Al cerrar todas las pestañas, ¿por qué el uso de la memoria ir todo el camino hacia abajo?
  • ¿Por qué no hay límites en el uso de memoria de extensiones/temas/complementos?
  • ¿Por qué el uso de la memoria aumenta si se deja abierto durante largos períodos de tiempo?
  • ¿Por qué las pérdidas de memoria son tan difíciles de encontrar y solucionar?

App y respuestas agnósticas de idiomas también muy apreciadas.

+0

esta pregunta es un poco amplia. Firefox sufre filtraciones de memoria, es mejor que leas sobre ese tema. El cierre de pestañas no necesariamente libera la memoria asignada para esa pestaña. –

+1

y tu pregunta de programación es? – KevinDTimm

+1

@KevinDTimm es la última viñeta en la lista – David

Respuesta

10

Los navegadores son como las personas - que reciben de edad, que reciben hinchado, y se les abandonaron para los modelos más pequeños y más delgados.

Firefox no es solo un navegador, es un ecosistema. Si bien creo que las versiones recientes están bastante hinchadas, el producto central es generalmente estable.

Sin embargo, Firefox es un ecosistema/plataforma para:

1) mal escrito plug-ins

2) código JavaScript mal escrito que se ejecuta dentro de ella.

3) Adobe Flash como plataforma para videos pesados ​​y para guiones publicitarios mal escritos como 'golpear a Osama bin Laden con un pato para reducir su tasa de hipoteca y recibir un iPod gratis * (se requiere participación).

4) Quicktime y otro reproductor multimedia.

5) Algunos incrustados código Java.

La descripción de una pérdida de memoria sugiere que una secuencia de comandos se ejecute fuera de control o que una herramienta de terceros solicite más memoria. Si alguna vez ejecuta Flash en una Mac, eso es casi un hecho junto con el 90% de utilización de la CPU.

El objetivo de la mayoría de los lenguajes de programación no es salvarlo, sino darle herramientas para que se salve. Puede escribir código incorrecto e hinchado con pérdidas de memoria en cualquier idioma, incluidos los que tienen recolección de basura.Las herramientas de terceros generalmente no están tan probadas como la plataforma en sí misma. Las páginas web que intentan hacer demasiado no son infrecuentes.

Si desea hacer un experimento para demostrar esto, obtenga una mac con Firefox y vaya a un sitio bien escrito como Stack Overflow y dedique una hora. Su uso de memoria no debería crecer mucho. Luego, dedique 5 minutos a visitar páginas aleatorias en Myspace.

Ahora voy a tratar de responder a sus preguntas basado en mis conjeturas ya que no estoy familiarizado con el código fuente

  • Al cerrar todas las pestañas, ¿por qué no lo hace el uso de la memoria ve todos los hacia abajo?

Considerando que cada instancia del navegador es un proceso independiente con su propia memoria, las pestañas en una única ventana están todos dentro del mismo proceso. Firefox solía tener algún tipo de almacenamiento en memoria caché en la memoria y simplemente cerrar una pestaña no borra la información relevante inmediatamente de la memoria caché en la memoria. Si volvió a abrir una pestaña en el mismo sitio, es posible que obtenga un mejor rendimiento. Había alguna opción avanzada que le permitía desactivarla, algo así como browser.cache.memory.enable. O simplemente busca la desactivación de la memoria caché.

* Why is there no limits on extensions/themes/plugins memory usage? 

Por la misma razón que Windows o Linux no tiene un proceso de investigación sobre las aplicaciones que se pueden ejecutar en ellos. Es un entorno abierto y asumes el riesgo. Si quieres un ambiente donde las aplicaciones y extensiones están 'validados', Apple podría ser el camino a seguir :)

* Why does the memory usage increase if it's left open for long periods of time? 

No todos los cálculos y acciones en una secuencia de comandos tienen manifestaciones visuales. Un script podría estar haciendo algunas cosas en segundo plano (como solicitar materiales adicionales, precargar cosas, solo errores) incluso si no lo ves.

* Why are memory leaks so difficult to find and fix? 

Se trata de la contabilidad. Piense en cada elemento que haya pedido prestado (incluso un bolígrafo) o que alguien le haya prestado en toda su vida. ¿Están todos contados? Las fugas de memoria son de la misma manera (tomas prestada la memoria del sistema), excepto que pasas elementos. Luego, mira las cosas en tu escritorio, ¿dejaste algo por ahí porque "podrías necesitarlo pronto" aunque probablemente no lo harás? misma historia

+4

Buena analogía con la contabilidad. –

+0

@ Warren: ¡Gracias! – Uri

+0

Y estoy en una mac ... – zaf

2
  • ¿Por qué las pérdidas de memoria son tan difíciles de encontrar y corregir?

Porque algunos desarrolladores se niegan a usar herramientas como Electric Fence.

+0

Los desarrolladores de Firefox usan Valgrind, que es mucho más capaz que Electric Fence. – slacker

+0

Bueno para ellos. Tengo buenos recuerdos de usar Valgrind para cazar problemas de memoria. (Por desgracia, mi código tenía problemas importantes en ese momento, por lo que la experiencia general fue dolorosa, pero eso no fue culpa de Valgrind ...) –

1

Las fugas de memoria están presentes en primer lugar porque desea mantener cosas en la memoria y no en el disco. Por ejemplo, supongamos que tiene una página web, que tiene imágenes, CSS, JavaSript, texto. Si para visualizar la página irá al disco duro cada vez que quiera usar el intérprete JavaScript o un analizador CSS, o un motor de representación de fuentes para mostrar un texto, entonces el navegador será muy lento y algunas veces no funcionará. en absoluto (porque una pieza de JavaScript puede necesitar variables presentes que son dejadas por otra pieza de JavaScript, por ejemplo). Por lo tanto, un navegador intenta mantener todo lo necesario para su trabajo en la memoria, y esas cosas se referencian fácilmente (JavaScript llama a Adobe Flash, Adobe Flash a JavaScript, etc.).Y debe tener mucho cuidado con tales referencias de recursos, ya que limpiarlas prematuramente y fuera de servicio romperá el código (es mejor que un recurso en ese momento muera repentinamente porque no está allí).

P.S. Vea también this article para algunos detalles sangrientos.

Cuestiones relacionadas