====== Ce qu'il faut savoir aussi ====== "stop-the-world" -> le GC bloque tous les process...\\ \\ A ne pas ecrire: System.gc() \\ Mettre vos objets a null est une bonne idee par contre.\\ Les objets sont mis dans le Young generation puis ils sont copiés dans le old generation si ils doivent etre conservés plus longtemps.\\ On parle de FullGC quand le GC verifie aussi le old generation.\\ Card Table pour garder une trace des Young objets qui sont references par des old objects.\\ According to JDK 7, there are 5 GC types. - Serial GC (utile pour peu de core et peu de memoire) - Parallel GC (=throughput GC) (utilise la parallelisation pour le GC bien si beaucoup de cores et de memoire) - Parallel Old GC (Parallel Compacting GC) - Concurrent Mark & Sweep GC (or "CMS") (low latency GC) (est utile quand le temps de reponse est crucial) - Garbage First (G1) GC (optimise pour la performance = le meilleur? Mais crash en JDK6) \\ Pour le monitoring: jps pour obtenir le id des machines virtuelles java. Puis jstat pour effectuer les mesures. exemple info toutes les secondes: jstat –gc 1000\\ Graphiquement, on peut utilise Java VisualVM (jvisualvm) ou VisualVM (visualvm).\\ \\ Tuning: D'abord programmons correctement: utiliser StringBuilder et StringBuffer au lieu de String.\\ Pour tuner le GC, il faut minimiser le passage de eden vers old zone et faire baisser le temps des full gc.\\ {{:san.java:san.java.needed:java.gc.tuning.png?nolink&|}}\\ \\ Comprendre le GC [[http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/]]\\ Monitorer le GC [[http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/]]\\ Optimiser le GC [[http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collection/]]\\ \\ Optimisation du garbage collector:\\ [[http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html]]\\ Garbage Collector Classic:\\ {{:san.java:san.java.needed:java.garbagecollector.classic.gif?nolink&|Garbage Collector Classic}}\\ \\ Parallel Collector: {{:san.java:san.java.needed:java.garbagecollector.gif?nolink&|Garbage Collector}} \\ Les objets sont rangées par durée de vie. Les objets ont une durée de vie courte en général. Les grosses collections ont une durée de vie plus longue. On parle de Generations Young (puis Survivor), Tenured (titulaire) ou Permanent. Connaitre les collections (notamment les non synchronized) ArrayList, HashMap\\ Eviter Vector, HashTable.\\ On n'utilise plus les synchronized.\\ \\ Tout savoir sur le multi threading (notamment synchronized)\\ \\ encapsulation\\ polymorphisme\\ dead lock\\ http://rom.developpez.com/java-synchronisation/ JUnit tests\\ tests d'intégration, tests d'acceptance et tests unitaires\\ http://www.siteduzero.com/informatique/tutoriels/les-tests-unitaires-en-java/definitions-et-utilite\\ un test unitaire doit etre reproductible, compréhensible et documenté.\\ test-driven : on écrit les tests en premier avant le code.\\ Liste des Asserts:\\ http://junit.sourceforge.net/javadoc/org/junit/Assert.html\\ Tests coverage: plugin Eclipse EclEmma\\ mock : classe qui implemente une vraie interface avec du code pipeau pour les tests\\ Tests java:\\ http://www.indiabix.com/online-test/java-programming-test/61 Classes Internes\\ http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class\\ http://blog.xebia.fr/2012/11/08/back-to-basics-bien-maitriser-les-classes-internes-en-java/\\