2 votes

Est-ce que URLClassLoader utilise le chargement paresseux?

Je suis en train d'utiliser URLClassLoader pour charger des jars à l'exécution à partir d'une URL de serveur (disons : http://jarsToBeLoaded/jars/). Je charge commons-collection.jar, commons-httpclient.jar et commons-io.jar, par exemple. Ma question est : ces jars sont-ils téléchargés dès que j'appelle addURL() pour chaque jar ou dès que j'instancie une classe qui est utilisée dans l'un de ces jars (paresseux) ?

0voto

Kristoffer E Points 1743

From what I can tell, the behavior is not specified, so it will depend on your JVM how the URLs are treated. I have looked through the code of Open JDK 8u40. For that implementation there is no downloading of Jars when addUrl() is called. The call is delegated to sun.misc.URLClassPath for which you can see the implementation here:

public synchronized void addURL(URL url) {
    if (closed)
        return;
    synchronized (urls) {
        if (url == null || path.contains(url))
            return;

        urls.add(0, url);
        path.add(url);

        if (lookupCacheURLs != null) {
            // The lookup cache is no longer valid, since getLookupCache()
            // does not consider the newly added url.
            disableAllLookupCaches();
        }
    }
}

Toute la magie du chargement des classes à partir de vos fichiers Jar se produira lorsque vous essayez de charger vos classes dans ces jars, en utilisant votre propre classloader, pour la première fois et java.net.URLClassLoader.findClass sera appelé. Je ne suis pas sûr si les Jars seront effectivement téléchargés et mis en cache quelque part ou si le JVM travaillera avec des flux réseau tout le temps - le code URLClassPath n'est pas facile à suivre...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X