Skip to content

Commit

Permalink
Merge pull request quarkusio#35385 from yrodiere/metaspace-improvemen…
Browse files Browse the repository at this point in the history
…ts-1

Metaspace improvements in QuarkusUnitTest - round 1
  • Loading branch information
yrodiere authored Aug 17, 2023
2 parents d30b3c4 + 4211c56 commit 79448ae
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

import io.quarkus.bootstrap.logging.InitialConfigurator;
import io.quarkus.bootstrap.logging.QuarkusDelayedHandler;
import io.quarkus.bootstrap.naming.DisabledInitialContextManager;
import io.quarkus.bootstrap.runner.Timing;
import io.quarkus.builder.Version;
import io.quarkus.deployment.GeneratedClassGizmoAdaptor;
Expand Down Expand Up @@ -83,7 +84,6 @@
import io.quarkus.runtime.appcds.AppCDSUtil;
import io.quarkus.runtime.configuration.ConfigUtils;
import io.quarkus.runtime.configuration.ProfileManager;
import io.quarkus.runtime.naming.DisabledInitialContextManager;
import io.quarkus.runtime.util.StepTiming;

public class MainClassBuildStep {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,11 @@ public boolean hasReloadableArtifacts() {
public void close() {
if (augmentClassLoader != null) {
augmentClassLoader.close();
augmentClassLoader = null;
}
if (baseRuntimeClassLoader != null) {
baseRuntimeClassLoader.close();
baseRuntimeClassLoader = null;
}
augmentationElements.clear();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.quarkus.runtime.naming;
package io.quarkus.bootstrap.naming;

import java.util.Hashtable;

Expand All @@ -22,8 +22,8 @@

/**
* Initial context that won't allow you to actually do anything.
*
* As most Quarkus applications don't let you
* <p>
* Used by Quarkus to disable JNDI.
*/
public class DisabledInitialContext extends InitialLdapContext {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.quarkus.runtime.naming;
package io.quarkus.bootstrap.naming;

import java.util.Hashtable;

Expand All @@ -8,6 +8,14 @@
import javax.naming.spi.InitialContextFactoryBuilder;
import javax.naming.spi.NamingManager;

/**
* Delegate used by Quarkus to disable JNDI.
* <p>
* This must be in a parent-first artifact as the initial context manager
* {@link NamingManager#setInitialContextFactoryBuilder(InitialContextFactoryBuilder) cannot be replaced}
* and will never get garbage-collected due to being referenced from a sticky class ({@link NamingManager}),
* so its classloader will never get garbage-collected either.
*/
public class DisabledInitialContextManager implements InitialContextFactoryBuilder {

public static synchronized void register() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public class QuarkusUnitTest
private Runnable afterAllCustomizer;
private CuratedApplication curatedApplication;
private RunningQuarkusApplication runningQuarkusApplication;
private QuarkusClassLoader quarkusUnitTestClassLoader;
private ClassLoader originalClassLoader;
private List<Dependency> forcedDependencies = Collections.emptyList();

Expand Down Expand Up @@ -633,12 +634,11 @@ public boolean test(String s) {
builder.setDisableClasspathCache(true);
}
if (!allowTestClassOutsideDeployment) {
builder
.setBaseClassLoader(
QuarkusClassLoader
.builder("QuarkusUnitTest ClassLoader", getClass().getClassLoader(), false)
.addClassLoaderEventListeners(this.classLoadListeners)
.addBannedElement(ClassPathElement.fromPath(testLocation, true)).build());
quarkusUnitTestClassLoader = QuarkusClassLoader
.builder("QuarkusUnitTest ClassLoader", getClass().getClassLoader(), false)
.addClassLoaderEventListeners(this.classLoadListeners)
.addBannedElement(ClassPathElement.fromPath(testLocation, true)).build();
builder.setBaseClassLoader(quarkusUnitTestClassLoader);
}
builder.addClassLoaderEventListeners(this.classLoadListeners);

Expand Down Expand Up @@ -748,6 +748,10 @@ public void afterAll(ExtensionContext extensionContext) throws Exception {
System.clearProperty("test.url");
Thread.currentThread().setContextClassLoader(originalClassLoader);
originalClassLoader = null;
if (quarkusUnitTestClassLoader != null) {
quarkusUnitTestClassLoader.close();
quarkusUnitTestClassLoader = null;
}
timeoutTask.cancel();
timeoutTask = null;
timeoutTimer.cancel();
Expand Down

0 comments on commit 79448ae

Please sign in to comment.