Gestion de la mémoire – quelques liens

Quelques raccourcis :

Vous trouverez ci-dessous quelques liens pertinents quant à la gestion de la mémoire.

Thématiques générales

Référence généraliste sur le sujet : http://www.memorymanagement.org/

Description d'approches spécialisées mises en application chez Facebook : http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

Un modèle théorique d'abstraction de l'allocation de la mémoire : http://research.microsoft.com/apps/pubs/default.aspx?id=67821

Ce que tout programmeur devrait savoir sur la mémoire, par Ulrich Drepper en 2007 : http://lwn.net/Articles/250967/ ou, en format PDF, http://www.akkadia.org/drepper/cpumemory.pdf

Être Memory-Safe :

L'allocation de la mémoire sous Linux :

Gestion de la mémoire sous Microsoft Windows :

Gestion de la mémoire en langage C :

Spécifique à C++ :

Commun à C et à C++ :

Gestion de la mémoire avec D :

Gestion de mémoire avec Erlang :

Gestion de mémoire avec JavaScript :

Spécifique à Objective-C :

Gestion de la mémoire sous .NET, autre que la collecte d'ordures :

Gestion de la mémoire avec Rust :

Gérer la croissance des tampons dynamiques :

La gestion de la mémoire entraîne des coûts qui peuvent ne pas sembler évidents de prime abord :

Gérer la mémoire à l'échelle d'un programme monstrueux comme Gmail, un texte de John McCutchan et Loreena Lee en 2013 : http://www.html5rocks.com/en/tutorials/memory/effectivemanagement/

Visualiser l'allocation dynamique de mémoire dans un programme de grande envergure, par Rich Geldreich en 2015 : http://richg42.blogspot.ca/2015/03/graphing-heap-memory-allocations.html

Qu'est-ce que le taux d'allocation d'un programme, et comment en tenir compte, un article de teneur générale mais orienté vers la saine gestion de la collecte d'ordures, par Nikita Salnikov-Tarnovski en 2015 : https://plumbr.eu/blog/garbage-collection/what-is-allocation-rate

En 2016, Scott Hanselman demande si l'on se préoccupe encore de la gestion de la mémoire : http://www.hanselman.com/blog/WhenDidWeStopCaringAboutMemoryManagement.aspx

À propos des fuites de mémoire

Un sujet qui s'applique à plusieurs langages, contrairement à certaines croyances :

Sujet connexe : comment mesurer la consommation de mémoire dans un produit tiers? Un texte de Nicholas Nethercote en 2014 : https://blog.mozilla.org/nnethercote/2014/07/07/measuring-memory-used-by-third-party-code/

Collecte automatique d'ordures (Garbage Collection)

Depuis 2015, il est interdit de livrer une application sur l'AppStore d'Apple si cette application utilise la collecte automatique d'ordures : https://developer.apple.com/news/?id=02202015a

Plusieurs textes sur ce sujet très à la mode...

Idées d'ordre général

Pédagogie :

Sites Wiki sur le sujet :

Mesurer les « performances » de moteurs de collecte d'ordures :

Un langage d'assemblage avec collecte automatique d'ordures : ftp://ftp.research.microsoft.com/pub/tr/TR-2006-169.pdf

Collecte d'ordures telle qu'implémentée sous Python et Ruby, textes de Pat Shaughnessy :

Opinions :

Technique :

Sous le modèle .NET

Pour les sources du moteur de collecte d'ordures de la plateforme .NET : https://github.com/dotnet/coreclr/tree/master/src/gc/sample

Pour la documentation qui l'accompagne, par Maoni Stephens en 2015 : https://github.com/dotnet/coreclr/blob/master/Documentation/garbage-collection.md

Comprendre le modèle préconisé par la plateforme .NET :

La pile est un détail d'implémentation :

À propos de la finalisation :

Sur la durée de vie des objets à portée locale : http://blogs.msdn.com/ericgu/archive/2004/07/23/192842.aspx

Écrire des programmes qui aident la collecte d'ordures à mieux performer :

Utiliser sainement la mémoire avec C# :

Exploiter la collecte d'ordures efficacement :

Comprendre l'interface IDisposable :

Comprendre les WeakReference :

Réaliser un regroupement d'objets (Object Pooling) : http://www.codeproject.com/KB/recipes/ObjectPooling.aspx

Collecte d'ordures sous .NET et comportement d'un programme :

À propos de sgen, le moteur de collecte d'ordures de Mono :

Sous le modèle Java

Historique de la collecte d'ordures dans ce langage : http://www.ibm.com/developerworks/java/library/j-jtp10283/

Les approches des trois principales JVM sur le marché : http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/

Légendes urbaines quant à la performance de ce modèle : http://www.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-lnxw01JavaUrbanLegends

Comment fonctionne la collecte d'ordures dans la JVM HotSpot : http://www.ibm.com/developerworks/opensource/library/j-jtp11253/

Comment calibrer la collecte d'ordures dans la JVM HotSpot : http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html (pour une version antérieure : http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html)

Collecte d'ordures quant la JVM a accès à beaucoup de mémoire vive : http://www.artima.com//lejava/articles/javaone_2008_gil_tene.html

Les modèles de collecte d'ordures disponibles pour Java :

La collecte d'ordures sous Java, série d'articles par Richard Waburton en 2013 :

Le nouveau (en 2009) moteur de collecte d'ordures, nommé G1 :

La collecte d'ordures n'élimine pas toutes les fuites de mémoire : http://johnsofteng.wordpress.com/2009/04/10/java-memory-leaks/

Collecte d'ordures et respect de contraintes de temps réel : http://queue.acm.org/detail.cfm?id=1217268

Le modèle sans pauses d'Azul :

En comparaison avec celui d'Erlang : http://www.javacodegeeks.com/2011/04/erlang-vs-java-memory-architecture.html

Analyser les problèmes de gestion de mémoire avec Java :

Gérer la finalisation sous Java, par Tony Printezis en 2007 : http://java.sun.com/developer/technicalArticles/javase/finalization/

Raffinements apportés à la gestion de la mémoire avec Java 8, rapportés par Pierre-Hugues Charbonneau en 2013 : http://java.dzone.com/articles/java-8-permgen-metaspace

Fichiers en mémoire (Memory-Mapped Files) avec Java, texte d'Alexander Turner en 2013 : http://jaxenter.com/high-speed-multi-threaded-virtual-memory-in-java.1-46188.html

Réduire les coûts du moteur de collecte d'ordures de Java, un texte d'Iris Shoor en 2013 : http://www.javacodegeeks.com/2013/07/5-coding-hacks-to-reduce-gc-overhead.html

Choisir la stratégie qui vous convient, par Eva Andreasson en 2014 : http://www.javaworld.com/article/2078645/java-se/jvm-performance-optimization-part-3-garbage-collection.html

Collecte d'ordures et Java 8, par Tal Weiss en 2014 : http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-java-8/

Collecte d'ordures avec Java 9, par Uwe Schindler en 2015 : https://jaxenter.com/java-9s-new-garbage-collector-whats-changing-whats-staying-118313.html

En 2016, Julia Evans relate les coûts en termes de temps d'exécution de la collecte d'ordures dans un programme Java, après en avoir payé le prix : http://jvns.ca/blog/2016/04/22/java-garbage-collection-can-be-really-slow/ (il semble qu'elle ait reçu beaucoup d'information sur le sujet dès le lendemain, et qu'elle ait colligé les liens reçus sur http://jvns.ca/blog/2016/04/23/some-links-on-java-garbage-collection/ alors avis aux intéressé(e)s!)

Sous le modèle C++

Démonstration de faisabilité d'un moteur de collecte d'ordures pour C++ (par Bjarne Stroustrup, et en 1996!) : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1996/N0932.pdf

Samuel Williams, en 2011, a écrit cette petite ébauche d'un embryon de moteur de collecte d'ordures (avec invocation manuelle et, ce qui est normal, sans finalisation) : http://www.oriontransfer.co.nz/blog/2011-09/simple-garbage-collector/index

Quelques moteurs de collecte d'ordures possibles :

Le (très connu) moteur de collecte d'ordures de Hans Boehm :

Propositions en vue du standard C++ 11 :

Une voix dissonante (mais forte), celle d'Andrew Koenig : http://www.ddj.com/blog/cppblog/archives/2008/02/automatic_memor.html

Une discussion simple des diverses options envisageables pour une collecte automatique d'ordures sous C++, mais avec une discussion beaucoup plus riche et détaillée dans les commentaires de l'article. L'article en soi est de Herb Sutter en 2011 : http://herbsutter.com/2011/10/25/garbage-collection-synopsis-and-c/

En général, avec C++, l'approche privilégiée repose sur les pointeurs intelligents. Pour un texte un peu plus vieux (1993!) de Nathan Myers sur la gestion de la mémoire dans ce langage, voir http://www.cantrip.org/wave12.html

Sous d'autres modèles

Gestion de la mémoire sous ActionScript :

La collecte d'ordures répartie sous AmbientTalk :

Gestion de mémoire en langage C :

Gestion de la mémoire avec D :

La collecte d'ordures sous Epoch :

La collecte d'ordures sous Erlang :

Avec Go :

Les techniques de comptage de références dans le noyau de Linux :

La collecte d'ordures sous LLVM :

La collecte d'ordures sous Lua :

À propos du modèle d'OCaml :

À propos du modèle de PHP :

La collecte d'ordures en Racket :

La collecte d'ordures sous Ruby :

Gestion de la mémoire avec Rust :

La collecte d'ordures sous Haskell :

Collecte d'ordures et jeux vidéos :

Collecte d'ordures et systèmes en temps réel :

Automatisation de la gestion des ressources avec Objective-C :

La collecte d'ordures dans JScript à l'intérieur du fureteur Internet Explorer, versions 6 et 7, et ce que l'équipe de gmail avait fait à l'époque pour en combattre les effets négatifs. Une histoire relatée par Daniel F Pupius en 2013 : https://medium.com/joys-of-javascript/6b1ea3ffca45

Collecte d'ordures sous Ruby :

Collecte d'ordures avec Firefox :

Le moteur de collecte d'ordures de LLVM, décrit en 2013 : https://eschew.wordpress.com/2013/10/28/on-llvms-gc-infrastructure/

Mémoire virtuelle

Comprendre la mémoire virtuelle, texte de 2004 par Norm Murray et Neil Horman : http://www.redhat.com/magazine/001nov04/features/vm/

http://blog.ksplice.com/2010/03/null-pointers-part-i/

Une vision générale du sens à donner à une erreur de type Out Of Memory : http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx

En 2006, Poul-Henning Kamp nous recommande de laisser le système d'exploitation faire son travail : https://www.varnish-cache.org/trac/wiki/ArchitectNotes

Allocateurs

Un allocateur constitue une abstraction de la machine et de ses mécanismes de gestion de la mémoire, et est destiné à collaborer avec un conteneur.

Considérations historiques et culturelles :

Considérations techniques :

Considérations de vitesse :

Le modèle Bloomberg :

Le standard C++ 11 a fortement raffiné le modèle traditionnel des allocateurs.

Texte de 2013 Nicholas Nethercote explique qu'une bibliothèque devrait toujours accepter que son code client utilise un allocateur maison, prenant pour exemple les facilités de gestion de mémoire de Firefox et sa capacité d'offrir un portrait réaliste de sa consommation de mémoire : https://blog.mozilla.org/nnethercote/2013/11/08/libraries-should-permit-custom-allocators/

Les allocateurs avec Rust, par Nicholas D. Matsakis en 2014 : http://smallcultfollowing.com/babysteps/blog/2014/11/14/allocators-in-rust/

Textes de Nicholas Frechette :

Partage de mémoire

Les bytes privés et les bytes protégés dans le monde .NET : http://seewinapp.blogspot.com/2005/09/pdc-shared-bytes-private-bytes-and.html

Gérer des événements synchrones dans des objets partagés sous Linux : http://www.ibm.com/developerworks/linux/library/l-syncevent/index.html

Partage de mémoire entre processus sous Microsoft Windows : http://www.codeproject.com/KB/threads/MemMap.aspx

Un texte de 1997 sur la mémoire partagée répartie, écrit par Daniel J. Scales et Kourosh Gharachorloo : http://pages.cs.wisc.edu/~bart/739/papers/shasta.pdf


Valid XHTML 1.0 Transitional

CSS Valide !