CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Fuite de mémoire avec les inner class

lokilok
lokilok
Niveau 16
30 avril 2018 à 16:35:08

Bonjour, j'aimerais savoir s'il y a une fuite de mémoire quand une classe possède une référence vers une de ses inner classe, genre :

class A {
    InnerA = new InnerA();
    class InnerA {
        int truc = 0;
    }
}

InnerA possède une référence vers A parce que c'est une inner class, A possède une référence vers InnerA parce que c'est écrit, donc il y a une fuite de mémoire, non ?

godrik
godrik
Niveau 30
30 avril 2018 à 18:38:21

ca depend ce que tu entends par fuite de memoire.

Le garbage collector va travailler de la facon suivante.
Il part de toutes les references stockees par chaque thread dans sa pile.
Il part de toutes les references stockees dans chaque variable globale (static).
Il va traverser ces objets et noter tous les objets qu'il rencontre recursivement.

Tous ces objets la sont dis "atteignable" et donc ca veut dire qu'ils ne vont pas etre garbage collecte.

Un cas typique de "fuite de memoire" en java vient de l'utilisation de tableau.
Suppose que tu reimplementes ta propre class Vector. Tu vas avoir un tableau quelque part
Object arr[];
et un compteur:
int nbobjet;
qui veut dire que le vecteur contient nbobjet stockes dans arr entre 0 et nbobjet-1.

Maintenant si tu retires le dernier element du tableau, tu vas faire un truc du genre:
nbobjet = nbobjet -1;
Mais l'objet qui est stocke dans arr[nbobjet] reste accessible vu du garbage collector. Donc il ne peut pas virer cet objet la. Cependant l'objet n'est pas accessible par ton application.

lokilok
lokilok
Niveau 16
30 avril 2018 à 18:55:17

Ce que je veux dire c'est que si je créé une instance de la classe A elle ne pourra jamais être supprimée parce que l'instance de InnerA dans A contiendra une référence vers cette instance de A, et inversement. Donc en gros je peux faire ce que je veux aucune instance de A que je créé ne pourra jamais être supprimé, du moins c'est ce que je pense.

Le code dans mon premier message est un peu faux, ça c'est plus juste :

class A {
    final InnerA innerA = new InnerA();
    class InnerA {
        int truc = 0;
    }
}
lokilok
lokilok
Niveau 16
30 avril 2018 à 18:59:52

Mais du coup je viens de relire ce que tu dis et je vois que je me trompe, je pensais que le garbage collector comptait juste les références, je savais pas qu'il regardait si elles étaient accessibles, merci.

godrik
godrik
Niveau 30
30 avril 2018 à 19:09:57

En effet, En C++ les "smart pointer" font basiquement juste du ref counting. (cependant tu as des weak pointer pour gerer les boucles.) Mais un vrai garbage collector fait quelquechose de plus intelligent.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment