fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7.  
  8. class MyObject {
  9. private String name;
  10. private MyObject other;
  11.  
  12. public MyObject(String name) {
  13. this.name = name;
  14. System.out.println("create " + name);
  15. }
  16.  
  17. // Il vaut mieux éviter d'utiliser finalize() sans raison
  18. // car cela complique la tâche du GC
  19. protected void finalize() {
  20. System.out.println("finalize " + name);
  21. }
  22.  
  23. public void setOther(MyObject other) {
  24. this.other = other;
  25. }
  26. }
  27.  
  28. /* Name of the class has to be "Main" only if the class is public. */
  29. class Ideone
  30. {
  31. public static void test () {
  32. MyObject p1 = new MyObject("object1");
  33. MyObject p2 = new MyObject("object2");
  34.  
  35.  
  36. MyObject p3 = new MyObject("object3");
  37.  
  38. // on fait un lien monodirectionnel de p4 vers p5
  39. MyObject p4 = new MyObject("object4");
  40. MyObject p5 = new MyObject("object5");
  41. p4.setOther(p5);
  42.  
  43. // on fait un lien bidirectionnel entre p6 et p7
  44. MyObject p6 = new MyObject("object6");
  45. MyObject p7 = new MyObject("object7");
  46. p6.setOther(p7);
  47. p7.setOther(p6);
  48. }
  49.  
  50. public static void main (String[] args) throws java.lang.Exception {
  51. test();
  52. System.out.println();
  53. // crade : on force le GC
  54. // ne pas faire cela !!!
  55. for (int i=0; i<5; i++) {
  56. System.gc();
  57. Thread.yield();
  58. }
  59. }
  60. }
Success #stdin #stdout 0.09s 380224KB
stdin
Standard input is empty
stdout
create object1
create object2
create object3
create object4
create object5
create object6
create object7

finalize object7
finalize object6
finalize object5
finalize object4
finalize object3
finalize object2
finalize object1