From 2ea6d0d62296832ac748bd9e1cddf1eec94da896 Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Mon, 16 Sep 2019 22:34:11 +0800 Subject: [PATCH] finsh Reflect --- blogs/Interview/Java.md | 24 ---- blogs/Java/深入理解反射.md | 230 ++++++++++++++++++++++++++++++- images/JVM/Method.invoke.png | Bin 0 -> 47372 bytes 3 files changed, 229 insertions(+), 25 deletions(-) delete mode 100644 blogs/Interview/Java.md create mode 100644 images/JVM/Method.invoke.png diff --git a/blogs/Interview/Java.md b/blogs/Interview/Java.md deleted file mode 100644 index fa12638..0000000 --- a/blogs/Interview/Java.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -深入理解 Java 之 反射 ---- - -### 目录 - -1. 反射的定义以及基础使用 -2. JVM 是如何实现反射调用的? -3. 反射调用的开销在哪? -4. 如何优化反射性能? -5. 参考 - -### 反射的定义以及基础使用 - - - -### 参考 - -[JVM是如何实现反射的?](https://time.geekbang.org/column/article/12192) - -[Java反射原理简析](http://fanyilun.me/2015/10/29/Java%E5%8F%8D%E5%B0%84%E5%8E%9F%E7%90%86/) - -[关于反射调用方法的一个log](https://www.iteye.com/blog/rednaxelafx-548536) - diff --git a/blogs/Java/深入理解反射.md b/blogs/Java/深入理解反射.md index ace9c15..c81f9cb 100644 --- a/blogs/Java/深入理解反射.md +++ b/blogs/Java/深入理解反射.md @@ -17,6 +17,17 @@ 5. 如何优化反射性能开销? 6. 参考 +### 前言 + +本文主要参考 [JVM 是如何实现反射的?](https://time.geekbang.org/column/article/12192),但是这篇文章需要购买才能阅读,有兴趣的可以支持一下原作者。 + +但是笔者在测试的过程中发现两个问题: + +1. 关闭 Inflation 机制并不会减少反射调用耗时 +2. 增加类型 Profile 默认数量并不会减少反射调用耗时 + +可能是我的测试方法有误,有理解的小伙伴可以拉我一把哇~ + ### 反射的定义以及基本使用 反射是 Java 语言中一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为。表现为如下两点: @@ -470,13 +481,230 @@ java.lang.Exception: # 17 在默认情况下,方法的反射调用为委派实现,委派给本地实现来进行方法调用。再调用超过 15 次之后,委派实现便会将委派对象切换至动态实现。这个动态实现的字节码是自动生成的,它将直接使用 invoke 指令来调用目标方法。 +反射调用的 Inflation 机制是可以通过参数(-Dsun.reflect.noInflation=true)来关闭的,这样一来,在反射调用一开始便会直接生成动态实现,而不会使用委派实现或者本地实现。 + ### 反射性能开销体现在哪? 在刚才的例子中,我们先后进行了 Class.forName,Class.getMethod 以及 Method.invoke 三个操作。其中,Class.forName 会调用本地方法,Class.getMethod 则会遍历该类的公有方法。如果没有匹配到,它还将遍历父类的公有方法,可想而知,这两个操作都非常耗时。 值得注意的是,以 getMethod 为代表的查找方法操作,会返回查找得到结果的一份拷贝。因此,我们应当避免在热点代码中使用返回 Method 数组的 getMethods 或者 getDeclaredMethods 方法,以减少不必要的堆空间消耗。 -在实践中,我们往往会在应用程序中缓存 Class.forName 和 Class.getMethod 的结果,因此 +在实践中,我们往往会在应用程序中缓存 Class.forName 和 Class.getMethod 的结果,因此,下面我们就只关注反射调用本身的性能开销。 + +```java +public class ReflectDemo { + + public void doSth(int i) { + + } + + public static void main(String[] args) throws Exception { + Class clazz = ReflectDemo.class; + Constructor constructor = clazz.getConstructor(); + Object object = constructor.newInstance(); + Method method = clazz.getMethod("doSth", int.class); + + ReflectDemo demo = new ReflectDemo(); + + long current = System.currentTimeMillis(); + for (int i = 1; i <= 2_000_000_000; i++) { + if (i % 100_000_000 == 0) { + long temp = System.currentTimeMillis(); + System.out.println(temp - current); + current = temp; + } + // 直接调用 + demo.doSth(2333); + // 反射调用 + // method.invoke(object, 2333); + } + } +} +``` + +取最后五个记录的平均值,作为预热后的峰值性能,一亿次的直接调用耗时为 94ms(macOS + JDK11)然后把 94 作为基准值。 + +改为反射调用,传入 2333 作为反射调用的参数,测得的结果约为基准值的 3.2 倍(301ms)。 + +除了反射调用外,还额外做了两个操作: + +第一,由于 Method.invoke 是一个变长参数方法,在字节码层面它的最后一个参数会是 Object 数组。Java 编译器会在方法调用处生成一个长度为传入参数数量的 Object 数组,并将传入参数一一存储进该数组中。 + +第二,由于 Object 数组不能存储基本类型,Java 编译器会对传入的基本数据类型进行自动装箱。 + +这两个操作除了带来性能开销外,还可能占用堆内存,使得 GC 更加频繁。 + +使用 -Xlog:gc 参数,打印 GC 信息,可以看到在疯狂的 GC: + +``` +// java -Xlog:gc ReflectDemo.java +// ... +[7.671s][info][gc] GC(108) Pause Young (Normal) (G1 Evacuation Pause) 301M->2M(499M) 1.087ms +[7.736s][info][gc] GC(109) Pause Young (Normal) (G1 Evacuation Pause) 301M->2M(499M) 1.132ms +[7.819s][info][gc] GC(110) Pause Young (Normal) (G1 Evacuation Pause) 301M->2M(499M) 1.219ms +[7.891s][info][gc] GC(111) Pause Young (Normal) (G1 Evacuation Pause) 301M->2M(499M) 1.159ms +[7.960s][info][gc] GC(112) Pause Young (Normal) (G1 Evacuation Pause) 301M->2M(499M) 1.172ms +``` + +那么,如何消除这部分开销呢? + +关于第二个自动装箱,Java 缓存了 [-128, 127] 中所有整数所对应的 Integer 对象。当需要自动装箱的整数在这个范围之内时,便返回缓存的 Integer,否则需要新建一个 Integer 对象。 + +因此,我们可以使用已经缓存的 Integer 对象或者扩大 Integer 对象。以这种方式测得的结果约为基准的 2.4 倍(222ms)。 + +现在我们再来看看因变长参数生成的 Object 数组,既然每个反射调用对应的参数个数是固定的,那么我们可以选择在循环外新建一个 Object 数组,设置好参数并直接交给反射调用,代码如下: + +```java +public class ReflectDemo { + + public void doSth(int i) { + + } + + public static void main(String[] args) throws Exception { + Class clazz = ReflectDemo.class; + Constructor constructor = clazz.getConstructor(); + Object object = constructor.newInstance(); + Method method = clazz.getMethod("doSth", int.class); + + // 在循环外构造参数数组 + Object[] arg = new Object[1]; + arg[0] = 2333; + + long current = System.currentTimeMillis(); + for (int i = 1; i <= 2_000_000_000; i++) { + if (i % 100_000_000 == 0) { + long temp = System.currentTimeMillis(); + System.out.println(temp - current); + current = temp; + } + // 反射调用 + method.invoke(object, arg); + } + } +} +``` + +测试的结果反而更加糟糕了,为基准值的 3.5 倍(331ms)。 + +再解决了自动装箱之后查看运行时的 GC 状况时,你会发现这段程序并不会触发 GC。其原因在于,原本的反射调用被内联了,从而使得即时编译器中的逃逸分析将原本新建的 Object 数组判断为不逃逸的对象。 + +如果一个对象不逃逸,那么即时编译器可以选择栈分配甚至是虚拟分配,也就是不占用堆空间。 + +如果在循环外新建数组,即时编译器无法确定这个数组会不会中途被更改,因此无法优化掉访问数组的操作,可谓是得不偿失。 + +前面我们提到过,可以关闭反射调用的 Inflation 机制,从而取消委派实现,直接使用动态实现。此外,每次反射调用都会检查目标方法权限,而这个检查同样可以在 Java 代码里关闭,在关闭了这权限检查机制之后,代码如下: + +```java +public class ReflectDemo { + + public void doSth(int i) { + + } + + public static void main(String[] args) throws Exception { + Class clazz = ReflectDemo.class; + Constructor constructor = clazz.getConstructor(); + Object object = constructor.newInstance(); + Method method = clazz.getMethod("doSth", int.class); + method.setAccessible(true); // 关闭权限检查 + + long current = System.currentTimeMillis(); + for (int i = 1; i <= 2_000_000_000; i++) { + if (i % 100_000_000 == 0) { + long temp = System.currentTimeMillis(); + System.out.println(temp - current); + current = temp; + } + // 反射调用 + method.invoke(object, 23); + } + } +} +``` + +测得的结果约为基准值的 2.2 倍(204ms)。 + +首先,在这个例子中,之所以反射调用能够变得那么快,主要是因为即时编译器中的方法内联。在关闭了 Inflation 的情况下,内联的瓶颈在于 Method.invoke 方法中对 MethodAccessor.invoke 方法的调用。 + +![Method.invoke.png](https://i.loli.net/2019/09/16/3ZhN8Of95zujI1P.png) + +在生产环境中,我们往往拥有多个不同的反射调用,对应多个 GeneratedMethodAccessor,也就是动态实现。 + +由于 Java 虚拟机的关于上述调用点的类型 profile(注:对于 invokevirtual 或者 invokeinterface,Java 虚拟机会记录调用者的具体类型,我们称之为类型 profile)无法同时记录这么多个类,因此可能造成所测试的反射调用没有被内联的情况。 + +```java +public class ReflectDemo { + + public void doSth(int i) { + + } + + public static void main(String[] args) throws Exception { + Class clazz = ReflectDemo.class; + Constructor constructor = clazz.getConstructor(); + Object object = constructor.newInstance(); + Method method = clazz.getMethod("doSth", int.class); + method.setAccessible(true); // 关闭权限检查 + + polluteProfile(); + + long current = System.currentTimeMillis(); + for (int i = 1; i <= 2_000_000_000; i++) { + if (i % 100_000_000 == 0) { + long temp = System.currentTimeMillis(); + System.out.println(temp - current); + current = temp; + } + // 反射调用 + method.invoke(object, 23); + } + } + + public static void polluteProfile() throws Exception { + Class clazz = ReflectDemo.class; + Constructor constructor = clazz.getConstructor(); + Object object = constructor.newInstance(); + Method method1 = clazz.getMethod("target1", int.class); + Method method2 = clazz.getMethod("target2", int.class); + for (int i = 0; i < 2000; i++) { + method1.invoke(object, 0); + method2.invoke(object, 0); + } + } + + public void target1(int i) { + + } + + public void target2(int i) { + + } +} +``` + +这时测试的结果为基准值的 7.2 倍(679ms)。也就是说,只要耽误了 Method.invoke 方法的类型 profile,性能开销便从 2.2 上升到 7.2 倍。 + +之所以这么慢,除了没有方法内联之外,另一个原因是逃逸分析不再生效。这个时候便可以在循环外构造参数数组,并直接传递给反射调用,这样子测的结果为基准值的 5.8 倍(548ms)。 + +除此之外,我们还可以提高 Java 虚拟机关于每个调用能够记录的类型数目(对应虚拟机参数 -XX:TypeProfileWidth,默认值为 2,这里设置为 8)。 + +#### 总结 + +影响反射调用耗时有以下原因: + +1. 方法表查找 +2. 构建 Object 数组以及可能存在的自动装拆箱操作 +3. 运行时权限检查 +4. 方法内联/逃逸分析 + +### 如何优化反射性能开销? + +1. 尽量避免反射调用虚方法 +2. 关闭运行时权限检查 +3. 可能需要增大基本数据类型对应的包装类缓存 +4. 关闭 Inflation 机制 +5. 提高 JVM 关于每个调用能够记录的类型数目 ### 参考 diff --git a/images/JVM/Method.invoke.png b/images/JVM/Method.invoke.png new file mode 100644 index 0000000000000000000000000000000000000000..aff91b1e3bc3db32456b1e44f1e8a4a97ffd6965 GIT binary patch literal 47372 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