From aleksey.shipilev at oracle.com Sun Mar 2 13:22:40 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Sun, 02 Mar 2014 21:22:40 +0000 Subject: hg: code-tools/jmh: jmh-generator-maven-plugin: add project depedencies to the execution, able to load classes from language libraries. Message-ID: <20140302212245.186B362449@hg.openjdk.java.net> Changeset: bbb7c7d0b22b Author: shade Date: 2014-03-03 01:22 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/bbb7c7d0b22b jmh-generator-maven-plugin: add project depedencies to the execution, able to load classes from language libraries. ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ClassInfoRepo.java ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-maven-plugin/src/main/java/org/openjdk/jmh/JmhMojo.java From aleksey.shipilev at oracle.com Mon Mar 3 05:07:17 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 03 Mar 2014 13:07:17 +0000 Subject: hg: code-tools/jmh: Revert the accidentally broken strictCheck in headers plugin. Message-ID: <20140303130722.83DAF62459@hg.openjdk.java.net> Changeset: 08022b9c9c91 Author: shade Date: 2014-03-03 17:06 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/08022b9c9c91 Revert the accidentally broken strictCheck in headers plugin. ! jmh-core/pom.xml From aleksey.shipilev at oracle.com Mon Mar 3 07:06:35 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 03 Mar 2014 15:06:35 +0000 Subject: hg: code-tools/jmh: API CHANGE: Make @Warmup/@Measurement/@OperationsPerInvocation accept "int"-s as parameters, not "long"-s. Message-ID: <20140303150636.1ED306245D@hg.openjdk.java.net> Changeset: fda5c52fc014 Author: shade Date: 2014-03-03 19:05 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/fda5c52fc014 API CHANGE: Make @Warmup/@Measurement/@OperationsPerInvocation accept "int"-s as parameters, not "long"-s. ! jmh-core-it/src/test/java/org/openjdk/jmh/it/compile/OperationsPerInvocationTest.java ! jmh-core/src/main/java/org/openjdk/jmh/annotations/Measurement.java ! jmh-core/src/main/java/org/openjdk/jmh/annotations/OperationsPerInvocation.java ! jmh-core/src/main/java/org/openjdk/jmh/annotations/Warmup.java From aleksey.shipilev at oracle.com Mon Mar 3 09:21:52 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 03 Mar 2014 17:21:52 +0000 Subject: hg: code-tools/jmh: ResultFormats should not generate empty result file if not activated. Message-ID: <20140303172152.E70D262463@hg.openjdk.java.net> Changeset: adb938a4aaca Author: shade Date: 2014-03-03 21:21 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/adb938a4aaca ResultFormats should not generate empty result file if not activated. ! jmh-core/src/main/java/org/openjdk/jmh/output/results/ResultFormatFactory.java From aleksey.shipilev at oracle.com Mon Mar 3 11:02:18 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 03 Mar 2014 19:02:18 +0000 Subject: hg: code-tools/jmh: Benchmark generators Javadocs. Message-ID: <20140303190218.D72666246F@hg.openjdk.java.net> Changeset: 52319f9ba066 Author: shade Date: 2014-03-03 23:01 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/52319f9ba066 Benchmark generators Javadocs. ! jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/ClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/FieldInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/GeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/MetadataInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/MethodInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/ParameterInfo.java From aleksey.shipilev at oracle.com Mon Mar 3 07:51:16 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 03 Mar 2014 15:51:16 +0000 Subject: hg: code-tools/jmh: Accept only non-final classes as implicit benchmark holders and @State-s. Message-ID: <20140303155116.8DBD36245F@hg.openjdk.java.net> Changeset: 75e8e2c3b31f Author: shade Date: 2014-03-03 19:50 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/75e8e2c3b31f Accept only non-final classes as implicit benchmark holders and @State-s. ! jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/ClassInfo.java From aleksey.shipilev at oracle.com Tue Mar 4 05:23:08 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 04 Mar 2014 13:23:08 +0000 Subject: hg: code-tools/jmh: Force inline @Setup/@TearDown-s. Prevent inlining of measurement loops. Message-ID: <20140304132313.BCC7A624A5@hg.openjdk.java.net> Changeset: 9260eb8cc032 Author: shade Date: 2014-03-04 17:21 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/9260eb8cc032 Force inline @Setup/@TearDown-s. Prevent inlining of measurement loops. ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/CompilerControlPlugin.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/StateObjectHandler.java From aleksey.shipilev at oracle.com Tue Mar 4 06:46:53 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 04 Mar 2014 14:46:53 +0000 Subject: hg: code-tools/jmh: Experimental archetype for Scala benchmarks. Message-ID: <20140304144655.52706624A9@hg.openjdk.java.net> Changeset: eb8c1e455463 Author: shade Date: 2014-03-04 18:46 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/eb8c1e455463 Experimental archetype for Scala benchmarks. + jmh-scala-benchmark-archetype/pom.xml + jmh-scala-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/src/main/scala/MyBenchmark.scala ! pom.xml From aleksey.shipilev at oracle.com Tue Mar 4 07:02:02 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 04 Mar 2014 15:02:02 +0000 Subject: hg: code-tools/jmh: Scala/Groovy archetypes: fix a few typos. Message-ID: <20140304150202.D575F624AD@hg.openjdk.java.net> Changeset: f01c984471c4 Author: shade Date: 2014-03-04 19:01 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/f01c984471c4 Scala/Groovy archetypes: fix a few typos. ! jmh-groovy-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml ! jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/src/main/groovy/MyBenchmark.groovy ! jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/src/main/scala/MyBenchmark.scala From aleksey.shipilev at oracle.com Tue Mar 4 07:13:42 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 04 Mar 2014 15:13:42 +0000 Subject: hg: code-tools/jmh: Experimental archetype for Kotlin benchmarks. Message-ID: <20140304151342.C9881624AE@hg.openjdk.java.net> Changeset: 2ff128615c9e Author: shade Date: 2014-03-04 19:13 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/2ff128615c9e Experimental archetype for Kotlin benchmarks. + jmh-kotlin-benchmark-archetype/pom.xml + jmh-kotlin-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/src/main/kotlin/MyBenchmark.ktm ! pom.xml From aleksey.shipilev at oracle.com Tue Mar 4 07:35:41 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Tue, 04 Mar 2014 19:35:41 +0400 Subject: JMH support for JVM languages Message-ID: <5315F2CD.8010302@oracle.com> Hi there, Currently, you can run non-Java benchmarks only if you do the JMH-annotated Java trampolines which will then call into the non-Java code you want. You can also possibly do the reflective/MH call into the compiled non-Java classes. Both ways are rather messy. If you track the commit history closely, you might have noticed we were working on getting the native support for JVM languages in JMH. This is a call for testing and feedback. In order to ease the testing, and also following The Rule of Three, we have committed three sample archetypes for running Scala, Groovy, and Kotlin benchmarks (that was a semi-random choice out of existing non-Java languages pool). We would like early testers to: a) Hack and try out the non-Java language benchmarks to see if JMH supports everything it supports for Java benchmarks. b) Review the compilation sequence code outlined in sample POMs for three existing language bindings. c) Suggest the code for compiling another non-Java language. d) Report on quirks, glitches, and things to improve. Build and test instructions: 1) Check out the bleeding edge JMH: $ hg clone http://hg.openjdk.java.net/code-tools/jmh/ jmh $ cd jmh/ 2) Build it. Note the additional target, which will deploy the archetypes on your local filesystem: $ mvn clean install archetype:update-local-catalog -DskipTests 3) Call the archetype to generate the sample project for you. Change "scala" to something else to use another archetype ("scala", "groovy", "kotlin" are supported now): $ cd /tmp $ mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=org.openjdk.jmh \ -DarchetypeArtifactId=jmh-scala-benchmark-archetype \ -DgroupId=org.sample \ -DartifactId=test \ -Dversion=1.0 \ -DarchetypeCatalog=local 4) Build the generated project: $ cd test/ $ mvn clean install. 5) Hack, hack, hack! Thanks, -Aleksey. From aleksey.shipilev at oracle.com Tue Mar 4 07:37:41 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Tue, 04 Mar 2014 19:37:41 +0400 Subject: JMH support for JVM languages In-Reply-To: <5315F2CD.8010302@oracle.com> References: <5315F2CD.8010302@oracle.com> Message-ID: <5315F345.806@oracle.com> On 03/04/2014 07:35 PM, Aleksey Shipilev wrote: > If you track the commit history closely, you might have noticed we were > working on getting the native support for JVM languages in JMH. This is > a call for testing and feedback. Forgot to mention that we will appreciate testing this week: that will help to promote it into the next point release. Thanks, -Aleksey. From aleksey.shipilev at oracle.com Tue Mar 4 06:59:25 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 04 Mar 2014 14:59:25 +0000 Subject: hg: code-tools/jmh: 2 new changesets Message-ID: <20140304145926.85447624AA@hg.openjdk.java.net> Changeset: 3ca2358efa84 Author: shade Date: 2014-03-04 18:53 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/3ca2358efa84 Scala archetype should follow JMH version. ! jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml Changeset: 0d51cc82da03 Author: shade Date: 2014-03-04 18:59 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/0d51cc82da03 Experimental archetype for Groovy benchmarks. + jmh-groovy-benchmark-archetype/pom.xml + jmh-groovy-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/src/main/groovy/MyBenchmark.groovy ! pom.xml From aleksey.shipilev at oracle.com Wed Mar 5 07:02:01 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Wed, 05 Mar 2014 15:02:01 +0000 Subject: hg: code-tools/jmh: @Setup/@TearDown methods should always be public. Message-ID: <20140305150202.D13C162505@hg.openjdk.java.net> Changeset: fd5fa0b4b3d0 Author: shade Date: 2014-03-05 19:00 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/fd5fa0b4b3d0 @Setup/@TearDown methods should always be public. ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/HelperMethodValidationPlugin.java From aleksey.shipilev at oracle.com Wed Mar 5 07:45:49 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Wed, 05 Mar 2014 15:45:49 +0000 Subject: hg: code-tools/jmh: Runners should follow the value declaration order for @Param. Message-ID: <20140305154550.23C2062508@hg.openjdk.java.net> Changeset: d99e6864bb4d Author: shade Date: 2014-03-05 19:45 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/d99e6864bb4d Runners should follow the value declaration order for @Param. + jmh-core-it/src/test/java/org/openjdk/jmh/it/params/ParamDeclaredOrderTest.java ! jmh-core/src/main/java/org/openjdk/jmh/runner/ActualParams.java ! jmh-core/src/main/java/org/openjdk/jmh/runner/Runner.java ! jmh-core/src/test/java/org/openjdk/jmh/output/results/ResultFormatTest.java ! jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_27_Params.java From aleksey.shipilev at oracle.com Thu Mar 6 00:08:15 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 08:08:15 +0000 Subject: hg: code-tools/jmh: Yak shaving: AnnHandler -> AnnotationInvocationHandler. Message-ID: <20140306080815.94F8262540@hg.openjdk.java.net> Changeset: 7e76b7ffe1e4 Author: shade Date: 2014-03-06 12:07 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/7e76b7ffe1e4 Yak shaving: AnnHandler -> AnnotationInvocationHandler. ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMFieldInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMMethodInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/AnnHandler.java + jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/AnnotationInvocationHandler.java From aleksey.shipilev at oracle.com Thu Mar 6 00:39:56 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 08:39:56 +0000 Subject: hg: code-tools/jmh: Yak shaving: clean up AnnotationInvocationHandler. Message-ID: <20140306083957.4CB2662545@hg.openjdk.java.net> Changeset: c4a7794f8474 Author: shade Date: 2014-03-06 12:39 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/c4a7794f8474 Yak shaving: clean up AnnotationInvocationHandler. ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/AnnotationInvocationHandler.java From aleksey.shipilev at oracle.com Thu Mar 6 03:27:49 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 11:27:49 +0000 Subject: hg: code-tools/jmh: Yak shaving: names and descriptors for languages archetypes. Message-ID: <20140306112750.1D7EA62560@hg.openjdk.java.net> Changeset: cc080f5bdbfa Author: shade Date: 2014-03-06 15:27 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/cc080f5bdbfa Yak shaving: names and descriptors for languages archetypes. ! jmh-groovy-benchmark-archetype/pom.xml ! jmh-kotlin-benchmark-archetype/pom.xml ! jmh-scala-benchmark-archetype/pom.xml ! jmh-simple-benchmark-archetype/pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 03:30:15 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 11:30:15 +0000 Subject: hg: code-tools/jmh: Yak shaving: no UnresolvedClassException anymore. Message-ID: <20140306113016.259A862561@hg.openjdk.java.net> Changeset: 70176b65e6ea Author: shade Date: 2014-03-06 15:29 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/70176b65e6ea Yak shaving: no UnresolvedClassException anymore. ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java From aleksey.shipilev at oracle.com Thu Mar 6 03:33:25 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 11:33:25 +0000 Subject: hg: code-tools/jmh: Yak shaving: no UnresolvedClassException anymore, #2. Message-ID: <20140306113325.91E4762563@hg.openjdk.java.net> Changeset: e587f4eecc96 Author: shade Date: 2014-03-06 15:32 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/e587f4eecc96 Yak shaving: no UnresolvedClassException anymore, #2. - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/UnresolvedClassException.java From aleksey.shipilev at oracle.com Thu Mar 6 04:28:52 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 12:28:52 +0000 Subject: hg: code-tools/jmh: Extract GeneratorDestination to be used as the benchmark generator sinks. Message-ID: <20140306122852.9ED2062565@hg.openjdk.java.net> Changeset: dc53c3435a3d Author: shade Date: 2014-03-06 16:27 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/dc53c3435a3d Extract GeneratorDestination to be used as the benchmark generator sinks. ! jmh-core/src/main/java/org/openjdk/jmh/generators/GenerateMicroBenchmarkProcessor.java + jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorDestinaton.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/CompilerControlPlugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/FileSystemDestination.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/GroupValidationPlugin.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/HelperMethodValidationPlugin.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/ParamValidationPlugin.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/Plugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/source/GeneratorDestination.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/source/GeneratorSource.java ! jmh-generator-maven-plugin/src/main/java/org/openjdk/jmh/JmhMojo.java From aleksey.shipilev at oracle.com Thu Mar 6 04:59:02 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 12:59:02 +0000 Subject: hg: code-tools/jmh: Yak shaving: jmh-core-it should depend on generator plugin only during the "asm" testing. Message-ID: <20140306125902.7BBCF62567@hg.openjdk.java.net> Changeset: a5f4419b6596 Author: shade Date: 2014-03-06 16:58 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/a5f4419b6596 Yak shaving: jmh-core-it should depend on generator plugin only during the "asm" testing. ! jmh-core-it/pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 05:52:31 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 13:52:31 +0000 Subject: hg: code-tools/jmh: jmh-core-it: speed up two tests. Message-ID: <20140306135235.DBFB86256C@hg.openjdk.java.net> Changeset: 6f23eb6640e5 Author: shade Date: 2014-03-06 17:21 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/6f23eb6640e5 jmh-core-it: speed up two tests. ! jmh-core-it/src/test/java/org/openjdk/jmh/it/synciter/SyncIterMeasurementOnlyTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/synciter/SyncIterNotOnlyMeasurementTest.java From aleksey.shipilev at oracle.com Thu Mar 6 05:52:47 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 13:52:47 +0000 Subject: hg: code-tools/jmh: Output: when warmup/measurement iterations set to "0", report should print "" Message-ID: <20140306135247.C4C526256D@hg.openjdk.java.net> Changeset: 6ab24e403b1c Author: shade Date: 2014-03-06 17:50 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/6ab24e403b1c Output: when warmup/measurement iterations set to "0", report should print "" ! jmh-core/src/main/java/org/openjdk/jmh/output/format/TextReportFormat.java From aleksey.shipilev at oracle.com Thu Mar 6 05:53:19 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 13:53:19 +0000 Subject: hg: code-tools/jmh: jmh-core-it: Tests should nominally run with 100ms iterations. Message-ID: <20140306135319.9DB726256E@hg.openjdk.java.net> Changeset: 360b85868316 Author: shade Date: 2014-03-06 17:50 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/360b85868316 jmh-core-it: Tests should nominally run with 100ms iterations. ! jmh-core-it/src/test/java/org/openjdk/jmh/it/IterationCountCmdTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/WarmupIterationCountAnnTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/WarmupIterationCountCmdTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractBenchmarkBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractBenchmarkBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractBenchmarkStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractBenchmarkStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractGroupBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractGroupBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractGroupStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractGroupStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractThreadBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractThreadBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractThreadStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/AbstractThreadStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritBenchmarkBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritBenchmarkBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritBenchmarkStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritBenchmarkStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritGroupBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritGroupBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritGroupStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritGroupStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritThreadBenchSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritThreadBenchTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritThreadStateSetupTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/fails/inherit/InheritThreadStateTearDownTest.java ! jmh-core-it/src/test/java/org/openjdk/jmh/it/params/ParamDeclaredOrderTest.java From aleksey.shipilev at oracle.com Thu Mar 6 06:14:57 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 14:14:57 +0000 Subject: hg: code-tools/jmh: jmh-core-it: Fix typo Message-ID: <20140306141457.EF0856256F@hg.openjdk.java.net> Changeset: 66fce52ced15 Author: shade Date: 2014-03-06 18:14 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/66fce52ced15 jmh-core-it: Fix typo ! jmh-core-it/src/test/java/org/openjdk/jmh/it/WarmupIterationCountCmdTest.java From aleksey.shipilev at oracle.com Thu Mar 6 07:46:08 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 15:46:08 +0000 Subject: hg: code-tools/jmh: Reflective generator source for benchmark generator. Message-ID: <20140306154609.D112F6257A@hg.openjdk.java.net> Changeset: f621dbf89424 Author: shade Date: 2014-03-06 19:40 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/f621dbf89424 Reflective generator source for benchmark generator. + jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFGeneratorSource.java From aleksey.shipilev at oracle.com Thu Mar 6 07:58:28 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 15:58:28 +0000 Subject: hg: code-tools/jmh: Move languages archetypes to jmh-archetypes subproject. Message-ID: <20140306155828.CB1616257B@hg.openjdk.java.net> Changeset: ff0dbd87f5ee Author: shade Date: 2014-03-06 19:58 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/ff0dbd87f5ee Move languages archetypes to jmh-archetypes subproject. + jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml + jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/src/main/groovy/MyBenchmark.groovy + jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml + jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/src/main/kotlin/MyBenchmark.ktm + jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml + jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml + jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/src/main/scala/MyBenchmark.scala + jmh-archetypes/jmh-simple-benchmark-archetype/pom.xml + jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/META-INF/maven/archetype.xml + jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/pom.xml + jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/src/main/java/MyBenchmark.java + jmh-archetypes/pom.xml - jmh-groovy-benchmark-archetype/pom.xml - jmh-groovy-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml - jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml - jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/src/main/groovy/MyBenchmark.groovy - jmh-kotlin-benchmark-archetype/pom.xml - jmh-kotlin-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml - jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml - jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/src/main/kotlin/MyBenchmark.ktm - jmh-scala-benchmark-archetype/pom.xml - jmh-scala-benchmark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml - jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml - jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/src/main/scala/MyBenchmark.scala - jmh-simple-benchmark-archetype/pom.xml - jmh-simple-benchmark-archetype/src/main/resources/META-INF/maven/archetype.xml - jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/pom.xml - jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/src/main/java/MyBenchmark.java ! pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 08:32:40 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 16:32:40 +0000 Subject: hg: code-tools/jmh: jmh-simple-benchmark-archetype -> jmh-java-benchmark-archetype Message-ID: <20140306163240.BBC4C6257E@hg.openjdk.java.net> Changeset: 28ef7c0cdd92 Author: shade Date: 2014-03-06 20:32 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/28ef7c0cdd92 jmh-simple-benchmark-archetype -> jmh-java-benchmark-archetype ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml < jmh-archetypes/jmh-simple-benchmark-archetype/pom.xml = jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/META-INF/maven/archetype.xml < jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/META-INF/maven/archetype.xml = jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml < jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/pom.xml = jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/src/main/java/MyBenchmark.java < jmh-archetypes/jmh-simple-benchmark-archetype/src/main/resources/archetype-resources/src/main/java/MyBenchmark.java ! jmh-archetypes/pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 09:44:09 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 17:44:09 +0000 Subject: hg: code-tools/jmh: Archetypes should have proper parent. Message-ID: <20140306174409.CB51A62584@hg.openjdk.java.net> Changeset: e272e2d1e7ab Author: shade Date: 2014-03-06 21:43 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/e272e2d1e7ab Archetypes should have proper parent. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 09:25:58 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 17:25:58 +0000 Subject: hg: code-tools/jmh: Modularize generator sources to separate projects. Message-ID: <20140306172558.7106A62580@hg.openjdk.java.net> Changeset: b3fee1e2779a Author: shade Date: 2014-03-06 21:25 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/b3fee1e2779a Modularize generator sources to separate projects. (Keeps ASMv4 from being transitive dependency from jmh-core). ! jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml - jmh-core/src/main/java/org/openjdk/jmh/generators/GenerateMicroBenchmarkProcessor.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APClassInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APFieldInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorDestinaton.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APMetadataInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APMethodInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/annotations/APParameterInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMClassInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMFieldInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMMethodInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ASMParameterInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/AnnotationInvocationHandler.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/ClassInfoRepo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/SourceElementError.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/SourceError.java - jmh-core/src/main/java/org/openjdk/jmh/generators/bytecode/SourceThrowableError.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/FileSystemDestination.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFClassInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFConstructorInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFFieldInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFGeneratorSource.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFMethodInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/reflective/RFParameterInfo.java + jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceElementError.java + jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceError.java + jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceThrowableError.java - jmh-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor + jmh-generator-annprocess/pom.xml + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/GenerateMicroBenchmarkProcessor.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APClassInfo.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APFieldInfo.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorDestinaton.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APMetadataInfo.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APMethodInfo.java + jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APParameterInfo.java + jmh-generator-annprocess/src/main/resources/META-INF/services/javax.annotation.processing.Processor + jmh-generator-bytecode/pom.xml + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMClassInfo.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMFieldInfo.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMMethodInfo.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMParameterInfo.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/AnnotationInvocationHandler.java + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ClassInfoRepo.java ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-maven-plugin/src/main/java/org/openjdk/jmh/JmhMojo.java + jmh-generator-reflection/pom.xml + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFClassInfo.java + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFConstructorInfo.java + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFFieldInfo.java + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFGeneratorSource.java + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFMethodInfo.java + jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFParameterInfo.java ! jmh-samples/pom.xml ! pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 09:55:01 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 17:55:01 +0000 Subject: hg: code-tools/jmh: Yak shaving: generators.source -> generators.core. Message-ID: <20140306175502.24DF562585@hg.openjdk.java.net> Changeset: c9d849db0faa Author: shade Date: 2014-03-06 21:51 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/c9d849db0faa Yak shaving: generators.source -> generators.core. ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGeneratorUtils.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkInfo.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/ClassInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/CompilerControlPlugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/FieldInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/FileSystemDestination.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/GenerationException.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/GeneratorDestination.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/GeneratorSource.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/GroupValidationPlugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/HelperMethodInvocation.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/HelperMethodValidationPlugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/HelperType.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/MetadataInfo.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodGroup.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodInfo.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodInvocation.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/ParamValidationPlugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/ParameterInfo.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/Plugin.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/SourceElementError.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/SourceError.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/SourceThrowableError.java + jmh-core/src/main/java/org/openjdk/jmh/generators/core/StateObject.java ! jmh-core/src/main/java/org/openjdk/jmh/generators/core/StateObjectHandler.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/BenchmarkInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/ClassInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/FieldInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/GenerationException.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/GeneratorDestination.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/GeneratorSource.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/HelperMethodInvocation.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/HelperType.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/MetadataInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/MethodGroup.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/MethodInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/MethodInvocation.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/ParameterInfo.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceElementError.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceError.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/SourceThrowableError.java - jmh-core/src/main/java/org/openjdk/jmh/generators/source/StateObject.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/GenerateMicroBenchmarkProcessor.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APClassInfo.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APFieldInfo.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorDestinaton.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APMethodInfo.java ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APParameterInfo.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMClassInfo.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMFieldInfo.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMGeneratorSource.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMMethodInfo.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ASMParameterInfo.java ! jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/ClassInfoRepo.java ! jmh-generator-maven-plugin/src/main/java/org/openjdk/jmh/JmhMojo.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFClassInfo.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFConstructorInfo.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFFieldInfo.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFGeneratorSource.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFMethodInfo.java ! jmh-generator-reflection/src/main/java/org/openjdk/jmh/generators/reflective/RFParameterInfo.java From aleksey.shipilev at oracle.com Thu Mar 6 10:34:44 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 18:34:44 +0000 Subject: hg: code-tools/jmh: Make sure LICENSE and THIRD-PARTY are consistent for the entire project. Message-ID: <20140306183445.7654F62586@hg.openjdk.java.net> Changeset: c60926972121 Author: shade Date: 2014-03-06 22:34 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/c60926972121 Make sure LICENSE and THIRD-PARTY are consistent for the entire project. + LICENSE + THIRD-PARTY + jmh-ant-sample/LICENSE + jmh-ant-sample/THIRD-PARTY + jmh-archetypes/LICENSE + jmh-archetypes/THIRD-PARTY + jmh-archetypes/jmh-groovy-benchmark-archetype/LICENSE + jmh-archetypes/jmh-groovy-benchmark-archetype/THIRD-PARTY + jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/LICENSE + jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/THIRD-PARTY + jmh-archetypes/jmh-java-benchmark-archetype/LICENSE + jmh-archetypes/jmh-java-benchmark-archetype/THIRD-PARTY + jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/LICENSE + jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/THIRD-PARTY + jmh-archetypes/jmh-kotlin-benchmark-archetype/LICENSE + jmh-archetypes/jmh-kotlin-benchmark-archetype/THIRD-PARTY + jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/LICENSE + jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/THIRD-PARTY + jmh-archetypes/jmh-scala-benchmark-archetype/LICENSE + jmh-archetypes/jmh-scala-benchmark-archetype/THIRD-PARTY + jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/LICENSE + jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/THIRD-PARTY + jmh-core-benchmarks/LICENSE + jmh-core-benchmarks/THIRD-PARTY + jmh-core-benchmarks/src/main/LICENSE + jmh-core-benchmarks/src/main/THIRD-PARTY ! jmh-core/THIRD-PARTY ! jmh-core/src/main/resources/THIRD-PARTY + jmh-generator-annprocess/LICENSE + jmh-generator-annprocess/THIRD-PARTY + jmh-generator-annprocess/src/main/resources/LICENSE + jmh-generator-annprocess/src/main/resources/THIRD-PARTY + jmh-generator-bytecode/LICENSE + jmh-generator-bytecode/THIRD-PARTY + jmh-generator-bytecode/src/main/resources/LICENSE + jmh-generator-bytecode/src/main/resources/THIRD-PARTY + jmh-generator-maven-plugin/LICENSE + jmh-generator-maven-plugin/THIRD-PARTY + jmh-generator-maven-plugin/src/main/resources/LICENSE + jmh-generator-maven-plugin/src/main/resources/THIRD-PARTY + jmh-generator-reflection/LICENSE + jmh-generator-reflection/THIRD-PARTY + jmh-generator-reflection/src/main/resources/LICENSE + jmh-generator-reflection/src/main/resources/THIRD-PARTY + jmh-samples/THIRD-PARTY + jmh-samples/src/main/resources/THIRD-PARTY From aleksey.shipilev at oracle.com Thu Mar 6 11:06:40 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 19:06:40 +0000 Subject: hg: code-tools/jmh: jmh-archetypes: escape project GAV coordinates from filtering. Message-ID: <20140306190640.756276258A@hg.openjdk.java.net> Changeset: eba4df6d0b73 Author: shade Date: 2014-03-06 23:06 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/eba4df6d0b73 jmh-archetypes: escape project GAV coordinates from filtering. ! jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml From aleksey.shipilev at oracle.com Thu Mar 6 11:49:09 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Thu, 06 Mar 2014 19:49:09 +0000 Subject: hg: code-tools/jmh: 3 new changesets Message-ID: <20140306194913.8150762593@hg.openjdk.java.net> Changeset: ef89a50c286c Author: shade Date: 2014-03-06 23:41 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/ef89a50c286c JMH v0.5 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: ba744d2e04ba Author: shade Date: 2014-03-06 23:41 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/ba744d2e04ba Added tag 0.5 for changeset ef89a50c286c ! .hgtags Changeset: 6086ebc7d925 Author: shade Date: 2014-03-06 23:42 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/6086ebc7d925 Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From aleksey.shipilev at oracle.com Fri Mar 7 05:44:35 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 07 Mar 2014 13:44:35 +0000 Subject: hg: code-tools/jmh: JSON output: truncate all remaining floating-point values. Message-ID: <20140307134439.F0D4D625DC@hg.openjdk.java.net> Changeset: ca9df05b8217 Author: shade Date: 2014-03-07 17:44 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/ca9df05b8217 JSON output: truncate all remaining floating-point values. ! jmh-core/src/main/java/org/openjdk/jmh/output/results/JSONResultFormat.java ! jmh-core/src/test/resources/org/openjdk/jmh/output/results/output-golden.json From aleksey.shipilev at oracle.com Fri Mar 7 06:29:36 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 07 Mar 2014 14:29:36 +0000 Subject: hg: code-tools/jmh: Improve the accuracy of Throughput result aggregators, and get better under/overflow avoidance. Message-ID: <20140307142936.AA6A8625E2@hg.openjdk.java.net> Changeset: bb8c78ac7e8e Author: shade Date: 2014-03-07 18:29 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/bb8c78ac7e8e Improve the accuracy of Throughput result aggregators, and get better under/overflow avoidance. ! jmh-core/src/main/java/org/openjdk/jmh/logic/results/ThroughputResult.java ! jmh-core/src/test/java/org/openjdk/jmh/logic/results/TestThroughputResult.java From aleksey.shipilev at oracle.com Fri Mar 7 08:39:20 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Fri, 07 Mar 2014 20:39:20 +0400 Subject: JMH v0.5 Message-ID: <5319F638.5050802@oracle.com> Hi there JMH users, JMH v0.5 is deployed to Maven Central now (thanks Evgeny!). http://central.maven.org/maven2/org/openjdk/jmh/jmh-core/ http://search.maven.org/#search%7Cga%7C1%7Cjmh I would like to highlight a few things about this release: * JVM languages support is pushed there. Please follow the updated JMH OpenJDK page to figure out how to use archetypes to generate the benchmarks for non-Java languages: http://openjdk.java.net/projects/code-tools/jmh/ The archetypes index on Maven Central should update in a few days (IIRC, Sunday morning). If you want JVM language support right now, you may want to use bleeding edge, as described here: http://mail.openjdk.java.net/pipermail/jmh-dev/2014-March/000556.html ...or shamelessly rip off the build configuration from some existing archetype: http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml * The important change for Java benchmark users is that we modularized jmh-core, and so you need an additional dependency for jmh-generator-annprocess to process your Java benchmarks with JMH 0.5+, if you want to keep the same behavior (some folks may choose to use other generators). Java benchmark archetypes already take care of that for you, but you will need to update the custom POMs you already have in your projects when upgrading, see: http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml * We fixed a few annoying usability bugs in @Param, and now you don't have to prefix numeric values with "zeroes" to match the numerical and lexicographical orders. Runners honor the declaration order of parameter values now. * @Params are not required to be public fields now: this helps for non-Java languages not exposing the public fields. * Internal inlining hints are reworked a bit to prohibit/enforce inlining of the generated benchmarks more accurately. This should yield more predictable performance in some cases. Thanks, -Aleksey. From aleksey.shipilev at oracle.com Fri Mar 7 11:33:26 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 07 Mar 2014 19:33:26 +0000 Subject: hg: code-tools/jmh: Clean up POMs: limit the transitive dependencies, jmh-generator-annprocess should not be included in the final JARs. Message-ID: <20140307193330.9F5A8625ED@hg.openjdk.java.net> Changeset: 571c253b3e26 Author: shade Date: 2014-03-07 23:33 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/571c253b3e26 Clean up POMs: limit the transitive dependencies, jmh-generator-annprocess should not be included in the final JARs. ! jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-samples/pom.xml From aleksey.shipilev at oracle.com Fri Mar 7 11:57:31 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 07 Mar 2014 19:57:31 +0000 Subject: hg: code-tools/jmh: 3 new changesets Message-ID: <20140307195732.8E535625EF@hg.openjdk.java.net> Changeset: 3e0a08bcfe2c Author: shade Date: 2014-03-07 23:44 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/3e0a08bcfe2c JMH v0.5.1 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: 61114a9f0822 Author: shade Date: 2014-03-07 23:44 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/61114a9f0822 Added tag 0.5.1 for changeset 3e0a08bcfe2c ! .hgtags Changeset: cf0605746784 Author: shade Date: 2014-03-07 23:56 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/cf0605746784 Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From aleksey.shipilev at oracle.com Fri Mar 7 13:45:46 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 07 Mar 2014 21:45:46 +0000 Subject: hg: code-tools/jmh: 4 new changesets Message-ID: <20140307214548.45EB462603@hg.openjdk.java.net> Changeset: 3b6da49953cd Author: shade Date: 2014-03-08 01:40 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/3b6da49953cd archetypes: force users to choose their libraries. ! jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml Changeset: 2767984ca172 Author: shade Date: 2014-03-08 01:42 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/2767984ca172 JMH v0.5.2 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: 0eeff2e82a46 Author: shade Date: 2014-03-08 01:42 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/0eeff2e82a46 Added tag 0.5.2 for changeset 2767984ca172 ! .hgtags Changeset: fd7213102d10 Author: shade Date: 2014-03-08 01:42 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/fd7213102d10 Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-maven-plugin/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From abissell at gmail.com Sun Mar 9 00:52:38 2014 From: abissell at gmail.com (Andrew Bissell) Date: Sat, 8 Mar 2014 16:52:38 -0800 Subject: No benchmarks found w/ version >= 0.5 Message-ID: I am using a gradle build script with the shadow plugin to generate a microbenchmarks.jar file from some JMH annotated microbenchmark classes. If I run the script using JMH version 0.4.2 or earlier, the benchmarks make it into the jar and are able to run as expected. But starting with version 0.5, the shadowJar task completes successfully, but I am not seeing any benchmarks appear at all (as confirmed by running `java -jar microbenchmarks.jar -l`). Just wondering if something has changed with the regexes or maybe I need to tweak my build process somehow. A quick scan of the debug logging from the shadowJar process didn't show any obvious differences or problems in how it is being run with the later version. I should also point out, I'm using JDK build 1.8.0-b132. I've also included my gradle build script below. Thanks! AB ================ build.gradle =========================== apply plugin: 'java' apply plugin: 'shadow' apply plugin: 'idea' sourceCompatibility = 1.8 sourceSets { main { resources { srcDir 'conf' } } } buildscript { repositories { mavenCentral() jcenter() } dependencies() { classpath 'com.github.jengelman.gradle.plugins:shadow:0.8' } } jar { manifest { attributes 'Main-Class': 'org.openjdk.jmh.Main' } } repositories { mavenLocal() mavenCentral() } shadow { exclude 'META-INF/*.DSA' exclude 'META-INF/*.RSA' outputFile = new File("build/libs/microbenchmarks.jar") } dependencies { compile group: 'org.openjdk.jmh', name: 'jmh-core', version: '0.4.2' compile fileTree(dir: 'libs', include: '*.jar') } test.scanForTestClasses = false From abissell at gmail.com Sun Mar 9 01:07:08 2014 From: abissell at gmail.com (Andrew Bissell) Date: Sat, 8 Mar 2014 17:07:08 -0800 Subject: Fwd: No benchmarks found w/ version >= 0.5 In-Reply-To: References: Message-ID: My apologies, I saw from the v0.5 changes in the mailing list that I needed to add the 'jmh-generator-annprocess' dependency. Sorry for the false support request! ---------- Forwarded message ---------- From: Andrew Bissell Date: Sat, Mar 8, 2014 at 4:52 PM Subject: No benchmarks found w/ version >= 0.5 To: jmh-dev at openjdk.java.net I am using a gradle build script with the shadow plugin to generate a microbenchmarks.jar file from some JMH annotated microbenchmark classes. If I run the script using JMH version 0.4.2 or earlier, the benchmarks make it into the jar and are able to run as expected. But starting with version 0.5, the shadowJar task completes successfully, but I am not seeing any benchmarks appear at all (as confirmed by running `java -jar microbenchmarks.jar -l`). Just wondering if something has changed with the regexes or maybe I need to tweak my build process somehow. A quick scan of the debug logging from the shadowJar process didn't show any obvious differences or problems in how it is being run with the later version. I should also point out, I'm using JDK build 1.8.0-b132. I've also included my gradle build script below. Thanks! AB ================ build.gradle =========================== apply plugin: 'java' apply plugin: 'shadow' apply plugin: 'idea' sourceCompatibility = 1.8 sourceSets { main { resources { srcDir 'conf' } } } buildscript { repositories { mavenCentral() jcenter() } dependencies() { classpath 'com.github.jengelman.gradle.plugins:shadow:0.8' } } jar { manifest { attributes 'Main-Class': 'org.openjdk.jmh.Main' } } repositories { mavenLocal() mavenCentral() } shadow { exclude 'META-INF/*.DSA' exclude 'META-INF/*.RSA' outputFile = new File("build/libs/microbenchmarks.jar") } dependencies { compile group: 'org.openjdk.jmh', name: 'jmh-core', version: '0.4.2' compile fileTree(dir: 'libs', include: '*.jar') } test.scanForTestClasses = false From aleksey.shipilev at oracle.com Sun Mar 9 17:01:42 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Sun, 09 Mar 2014 21:01:42 +0400 Subject: Fwd: No benchmarks found w/ version >= 0.5 In-Reply-To: References: Message-ID: <531C9E76.2050900@oracle.com> On 03/09/2014 05:07 AM, Andrew Bissell wrote: > My apologies, I saw from the v0.5 changes in the mailing list that I needed > to add the 'jmh-generator-annprocess' dependency. Sorry for the false > support request! No worries. I forgot to mention that the benefit of having the explicit dependency on the generator is that the annotation processor dependency may be omitted from the final JARs (in fact, archetypes mention scope:provided for that reason) -- which effectively disables JMH annotation processors from executing further should you make the dependency on the benchmarked JAR. -Aleksey. From aleksey.shipilev at oracle.com Mon Mar 10 17:48:46 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 10 Mar 2014 17:48:46 +0000 Subject: hg: code-tools/jmh: 4 new changesets Message-ID: <201403101748.s2AHmlHv008073@aojmv0008> Changeset: 5d20f8481fc6 Author: shade Date: 2014-03-08 11:20 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/5d20f8481fc6 Remove Maven plugin in favor of vanilla code generator. ! jmh-archetypes/jmh-groovy-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/src/main/resources/archetype-resources/pom.xml ! jmh-generator-bytecode/pom.xml + jmh-generator-bytecode/src/main/java/org/openjdk/jmh/generators/bytecode/JmhBytecodeGenerator.java - jmh-generator-maven-plugin/LICENSE - jmh-generator-maven-plugin/THIRD-PARTY - jmh-generator-maven-plugin/pom.xml - jmh-generator-maven-plugin/src/main/java/org/openjdk/jmh/JmhMojo.java - jmh-generator-maven-plugin/src/main/resources/LICENSE - jmh-generator-maven-plugin/src/main/resources/THIRD-PARTY ! pom.xml Changeset: 813992b1d95c Author: shade Date: 2014-03-08 12:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/813992b1d95c JMH v0.5.3 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: a5c258e87910 Author: shade Date: 2014-03-08 12:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/a5c258e87910 Added tag 0.5.3 for changeset 813992b1d95c ! .hgtags Changeset: 1e807b38ab9d Author: shade Date: 2014-03-08 12:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/1e807b38ab9d Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From aleksey.shipilev at oracle.com Tue Mar 11 09:40:18 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 11 Mar 2014 09:40:18 +0000 Subject: hg: code-tools/jmh: jmh-core-it: make "-P asm" working again. Message-ID: <201403110940.s2B9eItX027634@aojmv0008> Changeset: 84c7515e4c28 Author: shade Date: 2014-03-11 13:40 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/84c7515e4c28 jmh-core-it: make "-P asm" working again. ! jmh-core-it/pom.xml From aleksey.shipilev at oracle.com Tue Mar 11 10:11:30 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 11 Mar 2014 10:11:30 +0000 Subject: hg: code-tools/jmh: jmh-core-it: properly bind jmh generators to integration tests. Message-ID: <201403111011.s2BABVAM002086@aojmv0008> Changeset: 12e4a9bc826f Author: shade Date: 2014-03-11 14:11 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/12e4a9bc826f jmh-core-it: properly bind jmh generators to integration tests. ! jmh-core-it/pom.xml From aleksey.shipilev at oracle.com Tue Mar 11 10:52:05 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 11 Mar 2014 10:52:05 +0000 Subject: hg: code-tools/jmh: Yak shaving: remove failOnError from microbenchmark handler. Message-ID: <201403111052.s2BAq5Ui007688@aojmv0008> Changeset: d069e708207c Author: shade Date: 2014-03-11 14:51 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/d069e708207c Yak shaving: remove failOnError from microbenchmark handler. ! jmh-core/src/main/java/org/openjdk/jmh/runner/LoopMicroBenchmarkHandler.java From aleksey.shipilev at oracle.com Tue Mar 11 13:44:31 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 11 Mar 2014 13:44:31 +0000 Subject: hg: code-tools/jmh: Samples: mention you can override @Param value from the command line. Message-ID: <201403111344.s2BDiWN4002006@aojmv0008> Changeset: 6e8dc704ef36 Author: shade Date: 2014-03-11 17:44 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/6e8dc704ef36 Samples: mention you can override @Param value from the command line. ! jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_27_Params.java From aleksey.shipilev at oracle.com Tue Mar 11 15:28:42 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Tue, 11 Mar 2014 15:28:42 +0000 Subject: hg: code-tools/jmh: Yak shaving: AverageTime should spare some divisions. Message-ID: <201403111528.s2BFShru018114@aojmv0008> Changeset: 8d36acd30e77 Author: shade Date: 2014-03-11 19:28 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/8d36acd30e77 Yak shaving: AverageTime should spare some divisions. ! jmh-core/src/main/java/org/openjdk/jmh/logic/results/AverageTimeResult.java From aleksey.shipilev at oracle.com Wed Mar 12 12:41:01 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Wed, 12 Mar 2014 12:41:01 +0000 Subject: hg: code-tools/jmh: Regression: in some cases of lexically-nested classes, the annotation processor generators may be stuck in infinite walk through class hierarchies. Message-ID: <201403121241.s2CCf1qI028611@aojmv0008> Changeset: cc68b4175ee2 Author: shade Date: 2014-03-12 16:40 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/cc68b4175ee2 Regression: in some cases of lexically-nested classes, the annotation processor generators may be stuck in infinite walk through class hierarchies. ! jmh-generator-annprocess/src/main/java/org/openjdk/jmh/generators/annotations/APGeneratorSource.java From aleksey.shipilev at oracle.com Fri Mar 14 09:47:21 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 14 Mar 2014 09:47:21 +0000 Subject: hg: code-tools/jmh: 3 new changesets Message-ID: <201403140947.s2E9lM3T012047@aojmv0008> Changeset: 3ae98ec58b63 Author: shade Date: 2014-03-13 17:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/3ae98ec58b63 JMH v0.5.4 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: 4068b4e090ca Author: shade Date: 2014-03-13 17:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/4068b4e090ca Added tag 0.5.4 for changeset 3ae98ec58b63 ! .hgtags Changeset: d5436f54b459 Author: shade Date: 2014-03-13 17:37 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/d5436f54b459 Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From dmitry.chuyko at oracle.com Fri Mar 14 12:28:39 2014 From: dmitry.chuyko at oracle.com (Dmitry Chuyko) Date: Fri, 14 Mar 2014 16:28:39 +0400 Subject: AuxCounters & benchmark modes Message-ID: <5322F5F7.7020305@oracle.com> Hello. Current AuxCounters's javadoc says: "NOTE: This functionality is not available for all {@link BenchmarkMode}-s". It works in throughput mode but not for singleshot (-bm ss) mode. Maybe it makes sense to allow all modes. For example consider a state that collects some system statistics after each invocation. One more thing here is a name of units in output which for custom counters is the same as for main microbenchmark result (e.g. ops/ms). It would be nice to print nothing at least or to have some way to specify units, something like @Units("bytes"). Dmitry From leszekbartkowski at gmail.com Sun Mar 16 10:04:35 2014 From: leszekbartkowski at gmail.com (Leszek Bartkowski) Date: Sun, 16 Mar 2014 11:04:35 +0100 Subject: Changing order of benchmarks execution/printing Message-ID: Hi, I am wondering if there are some options, that control the way output is printed (and/or order in which benchmarks are executed). Currently I am getting something like this: Benchmark Mode Samples Mean Mean error Units f.m.e.b.JmhTest.wellHelloThere avgt 20 0.000 0.000 ms/op f.m.e.b.ConservativeJobExecutorBenchmarker.aggregatorBig ss 10 27768.926 14321.041 ms f.m.e.b.ConservativeJobExecutorBenchmarker.aggregatorSmall ss 10 3016.084 3.368 ms f.m.e.b.ConservativeJobExecutorBenchmarker.fiveRouterCircle ss 10 155810.011 110855.469 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.aggregatorBig ss 10 44050.651 5992.759 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.aggregatorSmall ss 10 124.168 108.465 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.fiveRouterCircle ss 10 10683.273 1205.494 ms But would be nicer to have it printed like this: Benchmark Mode Samples Mean Mean error Units f.m.e.b.JmhTest.wellHelloThere avgt 20 0.000 0.000 ms/op f.m.e.b.ConservativeJobExecutorBenchmarker.aggregatorBig ss 10 27768.926 14321.041 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.aggregatorBig ss 10 44050.651 5992.759 ms f.m.e.b.ConservativeJobExecutorBenchmarker.aggregatorSmall ss 10 3016.084 3.368 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.aggregatorSmall ss 10 124.168 108.465 ms f.m.e.b.ConservativeJobExecutorBenchmarker.fiveRouterCircle ss 10 155810.011 110855.469 ms f.m.e.b.StrictMonoJobExecutorBenchmarker.fiveRouterCircle ss 10 10683.273 1205.494 ms I.e. group results not by class+methodName, but just by method name, so I can see results of executing the same methods with different implementation right next to each other (all those methods are defined in AbstractJobExecutorBenchmarker). Is there some way to achieve this? Thanks, Leszek From sergeicelov at gmail.com Sun Mar 16 08:29:01 2014 From: sergeicelov at gmail.com (Sergey Tselovalnikov) Date: Sun, 16 Mar 2014 14:29:01 +0600 Subject: MethodHandle performance with JMH Message-ID: Hello. I tried to measure performance of MethodHandle in comparison with reflection, but get Exception, because jmh uses generated code. java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle()Integer to (Object[])Object I also tried compile latest version of JMH, but it does not help. Test project: https://github.com/SerCeMan/reflection-access-tests I run tests from the terminal with command: mvn clean install && java -jar target/microbenchmarks.jar ".*MethodStatic.*" -wi 5 -i 5 -f 1 > compiled.txt I have attached full log of test to mail. -- Best regards, Sergey Tselovalnikov -------------- next part -------------- # Run progress: 0.00% complete, ETA 00:01:00 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testFastMethod # Warmup Iteration 1: 202985523.617 ops/s # Warmup Iteration 2: 212347894.800 ops/s # Warmup Iteration 3: 212196359.267 ops/s # Warmup Iteration 4: 213447013.067 ops/s # Warmup Iteration 5: 213471461.150 ops/s Iteration 1: 213924226.650 ops/s Iteration 2: 209880137.350 ops/s Iteration 3: 213515409.050 ops/s Iteration 4: 213751700.700 ops/s Iteration 5: 213135858.433 ops/s Result : 212841466.437 ?(99.9%) 6475276.350 ops/s Statistics: (min, avg, max) = (209880137.350, 212841466.437, 213924226.650), stdev = 1681608.705 Confidence interval (99.9%): [206366190.087, 219316742.787] # Run progress: 16.67% complete, ETA 00:00:51 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testMethodAccessible # Warmup Iteration 1: 418036723.767 ops/s # Warmup Iteration 2: 422600293.717 ops/s # Warmup Iteration 3: 395042401.767 ops/s # Warmup Iteration 4: 391001383.817 ops/s # Warmup Iteration 5: 395369056.417 ops/s Iteration 1: 394491492.767 ops/s Iteration 2: 395177629.467 ops/s Iteration 3: 390742806.883 ops/s Iteration 4: 394611685.600 ops/s Iteration 5: 396597208.000 ops/s Result : 394324164.543 ?(99.9%) 8355080.734 ops/s Statistics: (min, avg, max) = (390742806.883, 394324164.543, 396597208.000), stdev = 2169787.934 Confidence interval (99.9%): [385969083.809, 402679245.277] # Run progress: 33.33% complete, ETA 00:00:41 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testMethodDirect # Warmup Iteration 1: 405525600.917 ops/s # Warmup Iteration 2: 408839118.000 ops/s # Warmup Iteration 3: 410968837.417 ops/s # Warmup Iteration 4: 402962379.233 ops/s # Warmup Iteration 5: 407941400.617 ops/s Iteration 1: 412409446.533 ops/s Iteration 2: 420323281.717 ops/s Iteration 3: 415267937.433 ops/s Iteration 4: 422684416.917 ops/s Iteration 5: 422254001.167 ops/s Result : 418587816.753 ?(99.9%) 17480050.701 ops/s Statistics: (min, avg, max) = (412409446.533, 418587816.753, 422684416.917), stdev = 4539513.657 Confidence interval (99.9%): [401107766.052, 436067867.455] # Run progress: 50.00% complete, ETA 00:00:31 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandle # Warmup Iteration 1: java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle()Integer to (Object[])Object at java.lang.invoke.MethodHandle.asType(MethodHandle.java:724) at java.lang.invoke.InvokeGeneric.dispatch(InvokeGeneric.java:103) at java.lang.invoke.InvokeGeneric.dispatchWithConversion(InvokeGeneric.java:117) at ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandle(ReflectionMethodStaticAccess.java:72) at ru.serce.jmh.generated.ReflectionMethodStaticAccess.testMethodHandle_Throughput_measurementLoop(ReflectionMethodStaticAccess.java:766) at ru.serce.jmh.generated.ReflectionMethodStaticAccess.testMethodHandle_Throughput(ReflectionMethodStaticAccess.java:735) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.invokeBenchmark(LoopMicroBenchmarkHandler.java:231) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.call(LoopMicroBenchmarkHandler.java:199) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.call(LoopMicroBenchmarkHandler.java:184) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) # Run progress: 66.67% complete, ETA 00:00:16 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandleExact # Warmup Iteration 1: java.lang.invoke.WrongMethodTypeException: expected ()Integer but found (Object[])Object at java.lang.invoke.Invokers.newWrongMethodTypeException(Invokers.java:349) at java.lang.invoke.Invokers.checkExactType(Invokers.java:360) at ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandleExact(ReflectionMethodStaticAccess.java:67) at ru.serce.jmh.generated.ReflectionMethodStaticAccess.testMethodHandleExact_Throughput_measurementLoop(ReflectionMethodStaticAccess.java:988) at ru.serce.jmh.generated.ReflectionMethodStaticAccess.testMethodHandleExact_Throughput(ReflectionMethodStaticAccess.java:957) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.invokeBenchmark(LoopMicroBenchmarkHandler.java:231) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.call(LoopMicroBenchmarkHandler.java:199) at org.openjdk.jmh.runner.LoopMicroBenchmarkHandler$BenchmarkTask.call(LoopMicroBenchmarkHandler.java:184) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) # Run progress: 83.33% complete, ETA 00:00:06 # VM invoker: /usr/lib/jvm/jdk1.7.0/jre/bin/java # VM options: # Fork: 1 of 1 # Warmup: 5 iterations, 1 s each # Measurement: 5 iterations, 1 s each # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: ru.serce.jmh.ReflectionMethodStaticAccess.testMethodNotAccessible # Warmup Iteration 1: 348737465.767 ops/s # Warmup Iteration 2: 352646818.650 ops/s # Warmup Iteration 3: 283695365.783 ops/s # Warmup Iteration 4: 281531651.700 ops/s # Warmup Iteration 5: 282486767.733 ops/s Iteration 1: 280791666.967 ops/s Iteration 2: 282225697.500 ops/s Iteration 3: 270797514.467 ops/s Iteration 4: 271152573.767 ops/s Iteration 5: 276548159.333 ops/s Result : 276303122.407 ?(99.9%) 20386954.287 ops/s Statistics: (min, avg, max) = (270797514.467, 276303122.407, 282225697.500), stdev = 5294427.287 Confidence interval (99.9%): [255916168.120, 296690076.694] Benchmark Mode Samples Mean Mean error Units r.s.j.ReflectionMethodStaticAccess.testFastMethod thrpt 5 212841466.437 6475276.350 ops/s r.s.j.ReflectionMethodStaticAccess.testMethodAccessible thrpt 5 394324164.543 8355080.734 ops/s r.s.j.ReflectionMethodStaticAccess.testMethodDirect thrpt 5 418587816.753 17480050.701 ops/s r.s.j.ReflectionMethodStaticAccess.testMethodNotAccessible thrpt 5 276303122.407 20386954.287 ops/s From aleksey.shipilev at oracle.com Mon Mar 17 08:46:02 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Mon, 17 Mar 2014 12:46:02 +0400 Subject: MethodHandle performance with JMH In-Reply-To: References: Message-ID: <5326B64A.60100@oracle.com> Hi, On 03/16/2014 12:29 PM, Sergey Tselovalnikov wrote: > I tried to measure performance of MethodHandle in comparison with > reflection, but get Exception, because jmh uses generated code. I don't think this statement is grounded in reality, because the stack trace you are getting originates the exception from your own benchmark method: java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle()Integer to (Object[])Object ... at ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandle(ReflectionMethodStaticAccess.java:72) ... > Test project: > https://github.com/SerCeMan/reflection-access-tests > > I run tests from the terminal with command: > mvn clean install && java -jar target/microbenchmarks.jar > ".*MethodStatic.*" -wi 5 -i 5 -f 1 > compiled.txt Apparently, the MethodHandle tests are not there; and history does not have any evidence of ReflectionMethodStaticAccess.testMethodHandleExact. But I can already see the problem: compiling signature-polymorphic MH tests with source/target 1.6 wouldn't work, make it 1.7. -Aleksey. From aleksey.shipilev at oracle.com Mon Mar 17 14:37:35 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Mon, 17 Mar 2014 14:37:35 +0000 Subject: hg: code-tools/jmh: Make percentile estimation much less memory hungry: before it used O(N) space, now uses O(1) for multiset statistics; list statistics makes less copies. Message-ID: <201403171437.s2HEbaMA023784@aojmv0008> Changeset: e43d8ad0152c Author: shade Date: 2014-03-17 18:30 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/e43d8ad0152c Make percentile estimation much less memory hungry: before it used O(N) space, now uses O(1) for multiset statistics; list statistics makes less copies. ! jmh-core/src/main/java/org/openjdk/jmh/util/internal/ListStatistics.java ! jmh-core/src/main/java/org/openjdk/jmh/util/internal/MultisetStatistics.java From sergeicelov at gmail.com Mon Mar 17 15:57:43 2014 From: sergeicelov at gmail.com (Sergey Tselovalnikov) Date: Mon, 17 Mar 2014 21:57:43 +0600 Subject: MethodHandle performance with JMH In-Reply-To: <5326B64A.60100@oracle.com> References: <5326B64A.60100@oracle.com> Message-ID: I'm sorry, you are absolutely right. I missed this moment, thank you very much 2014-03-17 14:46 GMT+06:00 Aleksey Shipilev : > Hi, > > On 03/16/2014 12:29 PM, Sergey Tselovalnikov wrote: > > I tried to measure performance of MethodHandle in comparison with > > reflection, but get Exception, because jmh uses generated code. > > I don't think this statement is grounded in reality, because the stack > trace you are getting originates the exception from your own benchmark > method: > > java.lang.invoke.WrongMethodTypeException: cannot convert > MethodHandle()Integer to (Object[])Object > ... > at > > ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandle(ReflectionMethodStaticAccess.java:72) > ... > > > Test project: > > https://github.com/SerCeMan/reflection-access-tests > > > > I run tests from the terminal with command: > > mvn clean install && java -jar target/microbenchmarks.jar > > ".*MethodStatic.*" -wi 5 -i 5 -f 1 > compiled.txt > > Apparently, the MethodHandle tests are not there; and history does not > have any evidence of ReflectionMethodStaticAccess.testMethodHandleExact. > But I can already see the problem: compiling signature-polymorphic MH > tests with source/target 1.6 wouldn't work, make it 1.7. > > -Aleksey. > -- ? ?????????, ?????? ????????????? From aleksey.shipilev at oracle.com Mon Mar 17 16:02:48 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Mon, 17 Mar 2014 20:02:48 +0400 Subject: MethodHandle performance with JMH In-Reply-To: References: <5326B64A.60100@oracle.com> Message-ID: <53271CA8.8050308@oracle.com> Sure :) -Aleksey. On 03/17/2014 07:57 PM, Sergey Tselovalnikov wrote: > I'm sorry, you are absolutely right. I missed this moment, thank you > very much > > > 2014-03-17 14:46 GMT+06:00 Aleksey Shipilev >: > > Hi, > > On 03/16/2014 12:29 PM, Sergey Tselovalnikov wrote: > > I tried to measure performance of MethodHandle in comparison with > > reflection, but get Exception, because jmh uses generated code. > > I don't think this statement is grounded in reality, because the stack > trace you are getting originates the exception from your own benchmark > method: > > java.lang.invoke.WrongMethodTypeException: cannot convert > MethodHandle()Integer to (Object[])Object > ... > at > ru.serce.jmh.ReflectionMethodStaticAccess.testMethodHandle(ReflectionMethodStaticAccess.java:72) > ... > > > Test project: > > https://github.com/SerCeMan/reflection-access-tests > > > > I run tests from the terminal with command: > > mvn clean install && java -jar target/microbenchmarks.jar > > ".*MethodStatic.*" -wi 5 -i 5 -f 1 > compiled.txt > > Apparently, the MethodHandle tests are not there; and history does not > have any evidence of ReflectionMethodStaticAccess.testMethodHandleExact. > But I can already see the problem: compiling signature-polymorphic MH > tests with source/target 1.6 wouldn't work, make it 1.7. > > -Aleksey. > > > > > -- > ? ?????????, > ?????? ????????????? From aleksey.shipilev at oracle.com Mon Mar 17 17:36:08 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Mon, 17 Mar 2014 21:36:08 +0400 Subject: AuxCounters & benchmark modes In-Reply-To: <5322F5F7.7020305@oracle.com> References: <5322F5F7.7020305@oracle.com> Message-ID: <53273288.2030505@oracle.com> On 03/14/2014 04:28 PM, Dmitry Chuyko wrote: > Current AuxCounters's javadoc says: "NOTE: This functionality is not > available for all {@link BenchmarkMode}-s". It works in throughput mode > but not for singleshot (-bm ss) mode. Maybe it makes sense to allow all > modes. For example consider a state that collects some system statistics > after each invocation. I think @AuxCounters are leaky abstraction, and we should not really try to get more from them (to the extent we would probably eliminate them before 1.0 release). They leak "how" to measure, not "what" to measure, which is a bad API design. @AuxCounters interpretation and implementation is trivial only for throughput/averagetime modes: these are the related to the number of @GMB calls the run makes. In other modes, what does @AuxCounter mean? In "sample time" and "single shot", this can naively be the time spend executing some part of @GMB call, which opens another can of worms: *how* you get that data? users do timestamps? how do these measurement correlate with JMH sampling? Making @AuxCounters to carry something not directly related to primary metrics makes another horrible API choice: it is *very* unclear what those secondary metrics are, what units they carry, what are their aggregation policies, whether we can ignore some of the values or not, etc. That being said, maybe there is a way to introduce secondary metrics to the benchmark which still does not pollute the API... @AuxCounters is not that way, unfortunately. -Aleksey. From aleksey.shipilev at oracle.com Mon Mar 17 17:42:06 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Mon, 17 Mar 2014 21:42:06 +0400 Subject: Changing order of benchmarks execution/printing In-Reply-To: References: Message-ID: <532733EE.1080902@oracle.com> Hi, On 03/16/2014 02:04 PM, Leszek Bartkowski wrote: > I.e. group results not by class+methodName, but just by method name, so I > can see results of executing the same methods with different implementation > right next to each other (all those methods are defined in > AbstractJobExecutorBenchmarker). Is there some way to achieve this? Sorry, there isn't. The current grouping order (class, method) is there for the most frequent use case of self-contained benchmarks. Doing (method, class) will jeopardize the runs when method names are generic and/or similar. You can probably emulate what you want by having a single parametrized benchmark, because parameter groups are the last, e.g. (class, method, param). @Setup methods can be used to instantiate a particular version of the class you want to measure based on @Param. -Aleksey. From nitsanw at yahoo.com Mon Mar 17 18:39:49 2014 From: nitsanw at yahoo.com (Nitsan Wakart) Date: Mon, 17 Mar 2014 11:39:49 -0700 (PDT) Subject: AuxCounters & benchmark modes In-Reply-To: <53273288.2030505@oracle.com> References: <5322F5F7.7020305@oracle.com> <53273288.2030505@oracle.com> Message-ID: <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> For what it is worth, I'm a fan of AuxCounters. Here are 2 use cases I found, perhaps they can find their way into the grand JMH vision: 1. Counting failed poll/offer on queue throughput benchmark. 2. Integrating hardware performance counters I like the @Units annotation, it's would be nice. On Monday, March 17, 2014 7:36 PM, Aleksey Shipilev wrote: On 03/14/2014 04:28 PM, Dmitry Chuyko wrote: > Current AuxCounters's javadoc says: "NOTE: This functionality is not > available for all {@link BenchmarkMode}-s". It works in throughput mode > but not for singleshot (-bm ss) mode. Maybe it makes sense to allow all > modes. For example consider a state that collects some system statistics > after each invocation. I think @AuxCounters are leaky abstraction, and we should not really try to get more from them (to the extent we would probably eliminate them before 1.0 release). They leak "how" to measure, not "what" to measure, which is a bad API design. @AuxCounters interpretation and implementation is trivial only for throughput/averagetime modes: these are the related to the number of @GMB calls the run makes. In other modes, what does @AuxCounter mean? In "sample time" and "single shot", this can naively be the time spend executing some part of @GMB call, which opens another can of worms: *how* you get that data? users do timestamps? how do these measurement correlate with JMH sampling? Making @AuxCounters to carry something not directly related to primary metrics makes another horrible API choice: it is *very* unclear what those secondary metrics are, what units they carry, what are their aggregation policies, whether we can ignore some of the values or not, etc. That being said, maybe there is a way to introduce secondary metrics to the benchmark which still does not pollute the API... @AuxCounters is not that way, unfortunately. -Aleksey. From aleksey.shipilev at oracle.com Mon Mar 17 18:50:23 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Mon, 17 Mar 2014 22:50:23 +0400 Subject: AuxCounters & benchmark modes In-Reply-To: <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> References: <5322F5F7.7020305@oracle.com> <53273288.2030505@oracle.com> <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> Message-ID: <532743EF.70705@oracle.com> On 03/17/2014 10:39 PM, Nitsan Wakart wrote: > For what it is worth, I'm a fan of AuxCounters. I'm not saying they are *very* bad. :) But, in current form, they are a bit of the nuisance, which can become a large nuisance if we try to further abuse them. > Here are 2 use cases I found, perhaps they can find their way into the > grand JMH vision: > 1. Counting failed poll/offer on queue throughput benchmark. I know about this one, and this easily tied into throughput/averagetime modes. > 2. Integrating hardware performance counters Can you elaborate on this? Do you actually feed the HWC data through @AuxCounters, or it is just an idea? The reason I ask is that HWC profilers integration should be the next big thing in JMH. -Aleksey. From georges.gomes at gmail.com Mon Mar 17 18:52:29 2014 From: georges.gomes at gmail.com (Georges Gomes) Date: Mon, 17 Mar 2014 19:52:29 +0100 Subject: AuxCounters & benchmark modes In-Reply-To: <532743EF.70705@oracle.com> References: <5322F5F7.7020305@oracle.com> <53273288.2030505@oracle.com> <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> <532743EF.70705@oracle.com> Message-ID: +1 HWC un JMH! On Mar 17, 2014 7:50 PM, "Aleksey Shipilev" wrote: > On 03/17/2014 10:39 PM, Nitsan Wakart wrote: > > For what it is worth, I'm a fan of AuxCounters. > > I'm not saying they are *very* bad. :) But, in current form, they are a > bit of the nuisance, which can become a large nuisance if we try to > further abuse them. > > > Here are 2 use cases I found, perhaps they can find their way into the > > grand JMH vision: > > 1. Counting failed poll/offer on queue throughput benchmark. > > I know about this one, and this easily tied into throughput/averagetime > modes. > > > 2. Integrating hardware performance counters > > Can you elaborate on this? Do you actually feed the HWC data through > @AuxCounters, or it is just an idea? The reason I ask is that HWC > profilers integration should be the next big thing in JMH. > > -Aleksey. > > From nitsanw at yahoo.com Mon Mar 17 18:57:03 2014 From: nitsanw at yahoo.com (Nitsan Wakart) Date: Mon, 17 Mar 2014 11:57:03 -0700 (PDT) Subject: AuxCounters & benchmark modes In-Reply-To: <532743EF.70705@oracle.com> References: <5322F5F7.7020305@oracle.com> <53273288.2030505@oracle.com> <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> <532743EF.70705@oracle.com> Message-ID: <1395082623.53001.YahooMailNeo@web120701.mail.ne1.yahoo.com> I used Overseer and reported via AuxCounters. It is rather unpleasant as it requires the Overseer implementation independently and is not well packaged in any way. The solution to different events names etc is also rather crude. But it works for a specific case. Having JMH deal with this for me would be awesome, when is it coming? On Monday, March 17, 2014 8:50 PM, Aleksey Shipilev wrote: On 03/17/2014 10:39 PM, Nitsan Wakart wrote: > For what it is worth, I'm a fan of AuxCounters. I'm not saying they are *very* bad. :) But, in current form, they are a bit of the nuisance, which can become a large nuisance if we try to further abuse them. > Here are 2 use cases I found, perhaps they can find their way into the > grand JMH vision: > 1. Counting failed poll/offer on queue throughput benchmark. I know about this one, and this easily tied into throughput/averagetime modes. > 2. Integrating hardware performance counters Can you elaborate on this? Do you actually feed the HWC data through @AuxCounters, or it is just an idea? The reason I ask is that HWC profilers integration should be the next big thing in JMH. -Aleksey. From aleksey.shipilev at oracle.com Wed Mar 19 13:08:05 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Wed, 19 Mar 2014 17:08:05 +0400 Subject: Hardware counters in JMH In-Reply-To: <1395082623.53001.YahooMailNeo@web120701.mail.ne1.yahoo.com> References: <5322F5F7.7020305@oracle.com> <53273288.2030505@oracle.com> <1395081589.49542.YahooMailNeo@web120704.mail.ne1.yahoo.com> <532743EF.70705@oracle.com> <1395082623.53001.YahooMailNeo@web120701.mail.ne1.yahoo.com> Message-ID: <532996B5.9090407@oracle.com> On 03/17/2014 10:57 PM, Nitsan Wakart wrote: > I used Overseer and reported via AuxCounters. It is rather unpleasant as > it requires the Overseer implementation independently and is not well > packaged in any way. The solution to different events names etc is also > rather crude. But it works for a specific case. > Having JMH deal with this for me would be awesome, when is it coming? This will require rebuilding the profiler bindings in JMH, and so will take a while. In our internal roadmap, it is the feature for the next 0.x release, which is 0.6 at this point. Here's the rough prototype we have now: http://cr.openjdk.java.net/~shade/jmh/perf-printassembly/ (We will, most probably, target Linux only, since that platform seems to be the only providing the reliable userspace access to HWC without bothering us with doing any native code). -Aleksey. From aleksey.shipilev at oracle.com Fri Mar 21 08:59:45 2014 From: aleksey.shipilev at oracle.com (aleksey.shipilev at oracle.com) Date: Fri, 21 Mar 2014 08:59:45 +0000 Subject: hg: code-tools/jmh: 3 new changesets Message-ID: <201403210859.s2L8xj8S021780@aojmv0008> Changeset: 194c452d2c2a Author: shade Date: 2014-03-21 00:33 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/194c452d2c2a JMH v0.5.5 ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml Changeset: eac3bae801de Author: shade Date: 2014-03-21 00:33 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/eac3bae801de Added tag 0.5.5 for changeset 194c452d2c2a ! .hgtags Changeset: c834a85d1933 Author: shade Date: 2014-03-21 00:34 +0400 URL: http://hg.openjdk.java.net/code-tools/jmh/rev/c834a85d1933 Continue in 1.0-SNAPSHOT. ! jmh-archetypes/jmh-groovy-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-java-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-kotlin-benchmark-archetype/pom.xml ! jmh-archetypes/jmh-scala-benchmark-archetype/pom.xml ! jmh-archetypes/pom.xml ! jmh-core-benchmarks/pom.xml ! jmh-core-it/pom.xml ! jmh-core/pom.xml ! jmh-generator-annprocess/pom.xml ! jmh-generator-bytecode/pom.xml ! jmh-generator-reflection/pom.xml ! jmh-samples/pom.xml ! pom.xml From nitsanw at yahoo.com Mon Mar 24 13:52:40 2014 From: nitsanw at yahoo.com (Nitsan Wakart) Date: Mon, 24 Mar 2014 06:52:40 -0700 (PDT) Subject: Feature Request: Allow @Setup to receive the thread Control Message-ID: <1395669160.52242.YahooMailNeo@web120703.mail.ne1.yahoo.com> Hi, Above is required to allow the pre-construction/initialization of halting policies under test such that they respect the control flags. I sadly need this to meet an existing interface requirement for the policy. Thanks, Nitsan From subsquirrel at gmail.com Tue Mar 25 17:18:27 2014 From: subsquirrel at gmail.com (ALex) Date: Tue, 25 Mar 2014 19:18:27 +0200 Subject: Count metrics with JMH Message-ID: <5331BA63.2060702@gmail.com> How can I use to calculate the amount of CPU time and memory in JMH? For example, I have: Code: |@State(Scope.Thread) @BenchmarkMode(Mode.All) public class JMHSample_My { int x= 1; int y= 2; @GenerateMicroBenchmark public int measureAdd() { return (x+ y); } @GenerateMicroBenchmark public int measureMul() { return (x* y); } public static void main(String[] args) throws RunnerException { Options opt= new OptionsBuilder() .include(".*" + JMHSample_My.class.getSimpleName() + ".*") .warmupIterations(5) .measurementIterations(5) .forks(1) .build(); new Runner(opt).run(); } }| Result: Benchmark Mode Samples Mean Mean error Units JMHSample_My.measureAdd thrpt 5 1060579.757 39506.950 ops/ms JMHSample_My.measureMul thrpt 5 1046872.684 79805.116 ops/ms JMHSample_My.measureAdd avgt 5 0.000 0.000 ms/op JMHSample_My.measureMul avgt 5 0.000 0.000 ms/op JMHSample_My.measureAdd sample 9549793 0.000 0.000 ms/op JMHSample_My.measureMul sample 9287002 0.000 0.000 ms/op JMHSample_My.measureAdd ss 5 0.001 0.000 ms JMHSample_My.measureMul ss 5 0.001 0.000 ms I can see the number of requests for time, the average time of the test, but do not see the average amount of CPU usage and memory usage. This can be done by means of JMH? From aleksey.shipilev at oracle.com Thu Mar 27 07:45:16 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Thu, 27 Mar 2014 11:45:16 +0400 Subject: Count metrics with JMH In-Reply-To: <5331BA63.2060702@gmail.com> References: <5331BA63.2060702@gmail.com> Message-ID: <5333D70C.4050805@oracle.com> On 03/25/2014 09:18 PM, ALex wrote: > I can see the number of requests for time, the average time of the test, > but do not see the average amount of CPU usage and memory usage. This > can be done by means of JMH? There are profilers (see -prof), but their functionality is sub-par at this point. Anyhow, reporting CPU/memory usage is OS-specific, and so may be out of scope for JMH. -Aleksey. From aleksey.shipilev at oracle.com Thu Mar 27 07:47:05 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Thu, 27 Mar 2014 11:47:05 +0400 Subject: Feature Request: Allow @Setup to receive the thread Control In-Reply-To: <1395669160.52242.YahooMailNeo@web120703.mail.ne1.yahoo.com> References: <1395669160.52242.YahooMailNeo@web120703.mail.ne1.yahoo.com> Message-ID: <5333D779.9090608@oracle.com> Hi Nitsan, On 03/24/2014 05:52 PM, Nitsan Wakart wrote: > Hi, Above is required to allow the pre-construction/initialization of > halting policies under test such that they respect the control flags. > I sadly need this to meet an existing interface requirement for the > policy. Can you describe the use case a bit better? I am hesitant to explode the JMH API, and so would like to understand if there is an alternative "one-size-fits-all" solution. Thanks, -Aleksey. From nitsanw at yahoo.com Thu Mar 27 07:51:50 2014 From: nitsanw at yahoo.com (Nitsan Wakart) Date: Thu, 27 Mar 2014 00:51:50 -0700 (PDT) Subject: Feature Request: Allow @Setup to receive the thread Control In-Reply-To: <5333D779.9090608@oracle.com> References: <1395669160.52242.YahooMailNeo@web120703.mail.ne1.yahoo.com> <5333D779.9090608@oracle.com> Message-ID: <1395906710.52318.YahooMailNeo@web120704.mail.ne1.yahoo.com> Hi, I'm benchmarking the Disruptor, which give an effectively blocking API, for 'queue' throughput. The way to contend with this could be to hack a WaitStrategy that would use the Control to check if it should stop spinning. The WaitStrategy is not part of the API under test but is decided on construction. Does this make sense? I can go into more detail Thanks, Nitsan On Thursday, March 27, 2014 9:47 AM, Aleksey Shipilev wrote: Hi Nitsan, On 03/24/2014 05:52 PM, Nitsan Wakart wrote: > Hi, Above is required to allow the pre-construction/initialization of > halting policies under test such that they respect the control flags. > I sadly need this to meet an existing interface requirement for the > policy. Can you describe the use case a bit better? I am hesitant to explode the JMH API, and so would like to understand if there is an alternative "one-size-fits-all" solution. Thanks, -Aleksey. From aleksey.shipilev at oracle.com Thu Mar 27 07:56:12 2014 From: aleksey.shipilev at oracle.com (Aleksey Shipilev) Date: Thu, 27 Mar 2014 11:56:12 +0400 Subject: Feature Request: Allow @Setup to receive the thread Control In-Reply-To: <1395906710.52318.YahooMailNeo@web120704.mail.ne1.yahoo.com> References: <1395669160.52242.YahooMailNeo@web120703.mail.ne1.yahoo.com> <5333D779.9090608@oracle.com> <1395906710.52318.YahooMailNeo@web120704.mail.ne1.yahoo.com> Message-ID: <5333D99C.5020200@oracle.com> Oh, so you want to inject the Control object into the code under test in @Setup. I thought you needed the stop flags in @Setup for some weird reason. I'll add this to the list of things to improve. -Aleksey. On 03/27/2014 11:51 AM, Nitsan Wakart wrote: > Hi, > I'm benchmarking the Disruptor, which give an effectively blocking API, > for 'queue' throughput. The way to contend with this could be to hack a > WaitStrategy that would use the Control to check if it should stop > spinning. The WaitStrategy is not part of the API under test but is > decided on construction. > Does this make sense? I can go into more detail > Thanks, > Nitsan > > > On Thursday, March 27, 2014 9:47 AM, Aleksey Shipilev > wrote: > Hi Nitsan, > > On 03/24/2014 05:52 PM, Nitsan Wakart wrote: >> Hi, Above is required to allow the pre-construction/initialization of >> halting policies under test such that they respect the control flags. >> I sadly need this to meet an existing interface requirement for the >> policy. > > Can you describe the use case a bit better? I am hesitant to explode the > JMH API, and so would like to understand if there is an alternative > "one-size-fits-all" solution. > > > Thanks, > > -Aleksey. > > > From dmitry.chuyko at oracle.com Thu Mar 27 08:54:16 2014 From: dmitry.chuyko at oracle.com (Dmitry Chuyko) Date: Thu, 27 Mar 2014 12:54:16 +0400 Subject: Count metrics with JMH In-Reply-To: <5333D70C.4050805@oracle.com> References: <5331BA63.2060702@gmail.com> <5333D70C.4050805@oracle.com> Message-ID: <5333E738.4030407@oracle.com> Hi, Currently you can use a tricky @AuxCounters state: it can do some measurements between iterations or between invokations. There are some diagnostic options provided by runtime and particularly by HotSpot. E.g. com.sun.management.OperatingSystemMXBean (CPU), java.lang.management.MemoryMXBean (memory). Anyway, the result is quite imprecise except maybe the average CPU usage for invocation. It's better for now to use OS tools for HW counters (perf, sar), while it's awaited JMH functionality. The same for process memory stats. And some external tool is necessary for java memory info (sampling of mxbeans or JFR or whatever), it would be nice to have sampling memory profiler in JMH that can cover vm memory counters. Dmitry On 03/27/2014 11:45 AM, Aleksey Shipilev wrote: > On 03/25/2014 09:18 PM, ALex wrote: >> I can see the number of requests for time, the average time of the test, >> but do not see the average amount of CPU usage and memory usage. This >> can be done by means of JMH? > There are profilers (see -prof), but their functionality is sub-par at > this point. Anyhow, reporting CPU/memory usage is OS-specific, and so > may be out of scope for JMH. > > -Aleksey. > From subsquirrel at gmail.com Thu Mar 27 12:35:04 2014 From: subsquirrel at gmail.com (Suburban Squirrel) Date: Thu, 27 Mar 2014 14:35:04 +0200 Subject: Count metrics with JMH In-Reply-To: <5333E738.4030407@oracle.com> References: <5331BA63.2060702@gmail.com> <5333D70C.4050805@oracle.com> <5333E738.4030407@oracle.com> Message-ID: Thanks for help. I try to write own counters. 2014-03-27 10:54 GMT+02:00 Dmitry Chuyko : > Hi, > > Currently you can use a tricky @AuxCounters state: it can do some > measurements between iterations or between invokations. There are some > diagnostic options provided by runtime and particularly by HotSpot. E.g. > com.sun.management.OperatingSystemMXBean (CPU), java.lang.management.MemoryMXBean > (memory). > Anyway, the result is quite imprecise except maybe the average CPU usage > for invocation. > It's better for now to use OS tools for HW counters (perf, sar), while > it's awaited JMH functionality. The same for process memory stats. And some > external tool is necessary for java memory info (sampling of mxbeans or JFR > or whatever), it would be nice to have sampling memory profiler in JMH that > can cover vm memory counters. > > Dmitry > > > On 03/27/2014 11:45 AM, Aleksey Shipilev wrote: > >> On 03/25/2014 09:18 PM, ALex wrote: >> >>> I can see the number of requests for time, the average time of the test, >>> but do not see the average amount of CPU usage and memory usage. This >>> can be done by means of JMH? >>> >> There are profilers (see -prof), but their functionality is sub-par at >> this point. Anyhow, reporting CPU/memory usage is OS-specific, and so >> may be out of scope for JMH. >> >> -Aleksey. >> >> >