/* * Copyright (C) 2014 Mark Clarke * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package za.co.jumpingbean.gc.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javassist.CtMethod; import javassist.CtNewConstructor; import javassist.CtNewMethod; import javassist.NotFoundException; import javax.management.MalformedObjectNameException; import javax.management.remote.JMXServiceURL; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import org.hamcrest.Matchers; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.greaterThanOrEqualTo; import org.junit.Test; import za.co.jumpingbean.gc.service.GCExplorerServiceException; import za.co.jumpingbean.gc.service.GeneratorService; import za.co.jumpingbean.gc.service.JMXQueryRunner; import za.co.jumpingbean.gc.service.LocalJavaProcessFinder; import za.co.jumpingbean.gc.service.constants.DESC; import za.co.jumpingbean.gc.service.constants.EdenSpace; import za.co.jumpingbean.gc.service.constants.OldGenerationCollector; import za.co.jumpingbean.gc.service.constants.OldGenerationSpace; import za.co.jumpingbean.gc.service.constants.PermGen; import za.co.jumpingbean.gc.service.constants.SurvivorSpace; import za.co.jumpingbean.gc.service.constants.YoungGenerationCollector; /** * * @author mark */ public class GCGeneratorTest { @Test public void testJMXQueryBrowser() { } @Test public void testSerialGCLookups() { assertThat(EdenSpace.isMember("Eden Space"), is(true)); assertThat(SurvivorSpace.isMember("Survivor Space"), is(true)); assertThat(OldGenerationSpace.isMember("Tenured Gen"), is(true)); //JVMCollector serial = JVMCollector.SERIALGC; assertThat(YoungGenerationCollector.isMember("Copy"), is(true)); assertThat(OldGenerationCollector.isMember("MarkSweepCompact"), is(true)); } @Test public void testParallelGCLookups() throws IllegalStateException { assertThat(EdenSpace.isMember("PS Eden Space"), is(true)); assertThat(SurvivorSpace.isMember("PS Survivor Space"), is(true)); assertThat(OldGenerationSpace.isMember("PS Old Gen"), is(true)); //JVMCollector parallelGC = JVMCollector.PARALLELGC; assertThat(YoungGenerationCollector.isMember("PS Scavenge"), is(true)); assertThat(OldGenerationCollector.isMember("PS MarkSweep"), is(true)); } @Test public void testConcMarkSweepGCLookups() throws IllegalStateException { assertThat(EdenSpace.isMember("Par Eden Space"), is(true)); assertThat(SurvivorSpace.isMember("Par Survivor Space"), is(true)); assertThat(OldGenerationSpace.isMember("CMS Old Gen"), is(true)); //JVMCollector concMarkSweepGC = JVMCollector.CONCMARKSWEEP; assertThat(YoungGenerationCollector.isMember("ParNew"), is(true)); assertThat(OldGenerationCollector.isMember("ConcurrentMarkSweep"), is(true)); } @Test public void testPermGenLookup() throws IllegalStateException { assertThat(PermGen.isMember("Perm Gen"), is(true)); assertThat(PermGen.isMember("PS Perm Gen"), is(true)); assertThat(PermGen.isMember("CMS Perm Gen"), is(true)); assertThat(PermGen.isMember("G1 Perm Gen"), is(true)); assertThat(PermGen.isMember("Metaspace"), is(true)); } @Test public void testG1GCLookups() throws IllegalStateException { assertThat(EdenSpace.isMember("G1 Eden Space"), is(true)); assertThat(SurvivorSpace.isMember("G1 Survivor Space"), is(true)); assertThat(OldGenerationSpace.isMember("G1 Old Gen"), is(true)); //JVMCollector concMarkSweepGC = JVMCollector.G1GC; assertThat(YoungGenerationCollector.isMember("G1 Young Generation"), is(true)); assertThat(OldGenerationCollector.isMember("G1 Old Generation"), is(true)); } @Test public void testStartStopTestApp() throws CannotCompileException, IOException, NotFoundException, InterruptedException, MalformedObjectNameException, IllegalStateException { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); UUID id = null; try { List<String> cmdOption = new LinkedList<>(); cmdOption.add("-XX:+UseConcMarkSweepGC"); id = gen.startTestApp("8484", "", "Test", cmdOption); String output = gen.getProcessOutput(id); assertThat(output, is(equalTo("Hello World"))); } finally { if (id != null) { gen.stopTestApp(id); } } } @Test public void testJMXQueryRunnerConcMarkSweepGCQuery() throws IOException, CannotCompileException, NotFoundException, MalformedObjectNameException, GCExplorerServiceException { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); List<String> cmdOption = new LinkedList<>(); cmdOption.add("-XX:+UseConcMarkSweepGC"); UUID procId = null; try { procId = gen.startTestApp("8484", "", "Test", cmdOption); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(Matchers.greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { if (procId != null) { gen.stopTestApp(procId); } } } @Test public void testJMXQueryRunnerSerialGCQuery() throws IOException, CannotCompileException, NotFoundException, MalformedObjectNameException, GCExplorerServiceException { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); UUID procId = null; try { List<String> cmdOption = new LinkedList<>(); cmdOption.add("-XX:+UseSerialGC"); procId = gen.startTestApp("8484", "", "Test", cmdOption); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { if (procId != null) { gen.stopTestApp(procId); } } } @Test public void testJMXQueryRunnerParallelGCQuery() throws IOException, CannotCompileException, NotFoundException, MalformedObjectNameException, IllegalStateException, GCExplorerServiceException { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); UUID procId = null; try { List<String> cmdOption = new LinkedList<>(); cmdOption.add("-XX:+UseParallelGC"); procId = gen.startTestApp("8484", "", "Test", cmdOption); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { if (procId != null) { gen.stopTestApp(procId); } } } @Test public void testJMXConnectionToLocalProcess() throws IOException, GCExplorerServiceException { Process p = Runtime.getRuntime().exec("jconsole"); try { try { Thread.sleep(2000); } catch (InterruptedException ex) { Logger.getLogger(GCGeneratorTest.class.getName()).log(Level.SEVERE, null, ex); } List<String> procs = LocalJavaProcessFinder.getLocalJavaProcesses(); assertThat(procs.size(), greaterThan(0)); String strPID = null; for (String proc : procs) { String[] items = proc.split(" "); if (items.length >= 2) { if (items[1].contains("JConsole")) { strPID = items[0]; break; } } } if (strPID == null) { p.destroy(); throw new GCExplorerServiceException("No suitable java process found."); } int pid = Integer.parseInt(strPID); GeneratorService gen = new GeneratorService(); UUID procId = gen.connectToJavaProcess(pid); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { p.destroy(); } } @Test public void testJMXConnectionToRemoteProcess() throws IOException, GCExplorerServiceException, CannotCompileException, NotFoundException { try { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); List<String> cmd = new LinkedList<>(); cmd.add("java"); cmd.add("-Dcom.sun.management.jmxremote"); cmd.add("-Dcom.sun.management.jmxremote.port=8888"); cmd.add("-Dcom.sun.management.jmxremote.ssl=false"); cmd.add("-Dcom.sun.management.jmxremote.authenticate=false"); cmd.add("-Djava.rmi.server.hostname=127.0.0.1"); cmd.add("Test"); ProcessBuilder procBuilder = new ProcessBuilder(cmd); Process proc = procBuilder.start(); BufferedReader rd = new BufferedReader(new InputStreamReader(proc.getErrorStream())); if (!proc.isAlive()) { String error = rd.readLine(); } Thread.sleep(1000L); try { UUID procId = gen.connectToJavaProcess( "service:jmx:rmi:///jndi/rmi://127.0.0.1:8888/jmxrmi", "", ""); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { proc.destroyForcibly(); } } catch (InterruptedException ex) { Logger.getLogger(GCGeneratorTest.class.getName()).log(Level.SEVERE, null, ex); } } @Test public void testJMXQueryRunnerG1GCQuery() throws IOException, CannotCompileException, NotFoundException, MalformedObjectNameException, GCExplorerServiceException { createTmpClassMainClass(); GeneratorService gen = new GeneratorService(); UUID procId = null; try { List<String> cmdOption = new LinkedList<>(); cmdOption.add("-XX:+UseG1GC"); procId = gen.startTestApp("8484", "", "Test", cmdOption); JMXQueryRunner runner = gen.getJMXQueryRunner(procId); //runner.init(); assertThat(runner.getOldGenCollector(), is(notNullValue())); assertThat(runner.getYoungGenCollector(), is(notNullValue())); assertThat(runner.getEdenSpace(), is(notNullValue())); assertThat(runner.getPermGenSpace(), is(notNullValue())); assertThat(runner.getSurvivorSpace(), is(notNullValue())); assertThat(runner.getOldGenSpace(), is(notNullValue())); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.EDENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.PERMGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEMAX).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEUSED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACEFREE).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.OLDGENSPACECOMMITTED).longValue(), is(greaterThan(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEMAX).longValue(), is(greaterThanOrEqualTo(-1L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEUSED).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACEFREE).longValue(), is(greaterThanOrEqualTo(0L))); assertThat(gen.queryJMXForValue(procId, DESC.SURVIVORSPACECOMMITTED).longValue(), is(greaterThan(0L))); } finally { if (procId != null) { gen.stopTestApp(procId); } } } private void createTmpClassMainClass() throws CannotCompileException, NotFoundException, IOException { ClassPool cpool = ClassPool.getDefault(); CtClass tmpClass; try { tmpClass = cpool.get("Test"); } catch (NotFoundException ex) { tmpClass = cpool.makeClass("Test"); if (tmpClass.isFrozen()) { return; } CtConstructor defaultConstructor = CtNewConstructor.defaultConstructor(tmpClass); tmpClass.addConstructor(defaultConstructor); String str = "public static void main(String []args){" + "Test test = new Test();" + "Byte[]bigArr = new Byte[100000000];" + "Byte[]arr = new Byte[1000];" + "System.out.println(\"Hello World\");" + "try {" + " Thread.sleep(2000L);" + "} catch (InterruptedException ex1) {" + "}" + "}"; CtMethod main = CtNewMethod.make(str, tmpClass); tmpClass.addMethod(main); tmpClass.writeFile(); } } }