Attempt to subclass IMethods and add benchmark script
diff --git a/benchmark.sh b/benchmark.sh
new file mode 100755
index 0000000..c189192
--- /dev/null
+++ b/benchmark.sh
@@ -0,0 +1,4 @@
+# Remove lock file to prevent caching problems when rerunning the benchmark
+rm .gradle/2.14.1/taskArtifacts/cache.properties.lock
+# Run the actual benchmark
+./gradlew jmh
diff --git a/src/jmh/java/mockitointegration/IMethodsClassLoader.java b/src/jmh/java/mockitointegration/IMethodsClassLoader.java
index 051d4e7..67aa45d 100644
--- a/src/jmh/java/mockitointegration/IMethodsClassLoader.java
+++ b/src/jmh/java/mockitointegration/IMethodsClassLoader.java
@@ -1,5 +1,7 @@
 package mockitointegration;
 
+import net.bytebuddy.ByteBuddy;
+import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
 import org.mockitousage.IMethods;
 
 import java.io.ByteArrayOutputStream;
@@ -8,8 +10,19 @@
 
 class IMethodsClassLoader extends ClassLoader {
 
+    private ByteBuddy byteBuddy;
+
     IMethodsClassLoader() {
         super(null);
+        byteBuddy = new ByteBuddy();
+    }
+
+    Class<? extends IMethods> loadIMethods() {
+        return byteBuddy
+                .subclass(IMethods.class)
+                .make()
+                .load(this, ClassLoadingStrategy.Default.WRAPPER)
+                .getLoaded();
     }
 
     @Override
diff --git a/src/jmh/java/mockitointegration/MockitoMockBenchmark.java b/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
index f131176..918667c 100644
--- a/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
+++ b/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
@@ -8,7 +8,7 @@
 
     private Class<?> clazz;
 
-    private ClassLoader loader;
+    private IMethodsClassLoader loader;
 
     public MockitoMockBenchmark() {
         loader = new IMethodsClassLoader();
@@ -17,7 +17,7 @@
 
     @Setup(Level.Invocation)
     public void setup() throws ClassNotFoundException {
-        clazz = loader.loadClass("org.mockitousage.IMethods");
+        clazz = loader.loadIMethods();
     }
 
     @TearDown
diff --git a/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java b/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
index 2381e27..545da9d 100644
--- a/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
+++ b/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
@@ -9,7 +9,7 @@
 
     private IMethods mock;
 
-    private ClassLoader loader;
+    private IMethodsClassLoader loader;
 
     public MockitoMockInvocationBenchmark() {
         loader = new IMethodsClassLoader();
@@ -18,7 +18,7 @@
 
     @Setup(Level.Invocation)
     public void setup() throws ClassNotFoundException {
-        mock = (IMethods) Mockito.mock(loader.loadClass("org.mockitousage.IMethods"));
+        mock = Mockito.mock(loader.loadIMethods());
     }
 
     @TearDown