2017-09-20 2 views
5

J'ai trois modules: module-a, module-b, module-c. Module-a et module-b sont dans la couche de démarrage. Couche pour module-c je me crée. Module-c a l'implémentation JPMS du service dont l'interface est dans le module-a.Comment faire pour supprimer la couche de module dans Java 9?

C'est ainsi que je crée un calque avec module-c dans le module-b. Puis, dans le module-b, j'appelle le service du module-c. Ensuite, dans le module-b, j'appelle le service du module-c. Une fois l'exécution du service terminée, je n'ai plus besoin de module-c et de nouveau calque créé. Comment l'enlever de JVM et libérer toutes les ressources? Est-ce suffisant pour faire layer = null;?

+0

Est-ce que créer un nouveau 'ModuleLayer' sans module-c ne fonctionne pas? – nullpointer

+0

Pourriez-vous mettre à jour la question avec ce que vous avez exactement essayé et qu'est-ce qui en résulte s'il vous plaît. – nullpointer

+0

@nullpointer Ma question a toutes les informations, ce que je fais et quelle est la question. Si vous ne comprenez pas quelque chose, dites ce que vous ne comprenez pas. –

Répondre

5

La couche de module, les modules de la couche et les chargeurs de classe prenant en charge la couche peuvent être GC/déchargés lorsqu'ils ne sont plus joignables. Si vous voulez vous le prouver, créez une référence faible à l'objet layer et vous devriez voir que la référence est effacée (et mise en file d'attente si vous utilisez une file d'attente de référence) lorsque la couche est GCée.

2

Un EMPTY_LAYER doit résoudre votre cas d'utilisation (d'un des commentaires sur la question, en essayant d'assigner new HashSet<> comme racines) ici, dans lequel les références à d'autres couches plus traitées dans le layer que vous avez créé:

layer = ModuleLayer.empty(); 

Renvoie le calque vide. Il n'y a pas de modules dans la couche vide. Il n'a pas de parents.


Sur l'idée d'être en mesure d'éliminer une couche former explicitement la machine virtuelle Java, je ne serais pas attendre probablement une telle API exposée publiquement depuis une machine virtuelle Java est censé avoir au moins une couche non vide, la couche de démarrage, créée lors du démarrage de la machine virtuelle Java.

Et si une telle méthode est exposée, je me demande si les utilisateurs peuvent aussi essayer de supprimer cette couche. Bien que j'essaie d'être techniquement hypothétique sur cette partie.