优化 Java 反射字段访问

最近负责的一个 Java 服务经常报 CPU 占用高的告警。于是乘着一次 CPU 高的时候,去用 JFR profile 了一下。(使用 JFR 对 Java 应用 profile 可以参考这篇文章:Java 应用在线性能分析和火焰图 )。把数据拖回来用 JMC 打开一看,发现热点都在反射上: 图里排在最前面的都是反射相关的函数,而且实际都是同一个地方引入的。那里为了读取一个私有字段,使用了类似下面的代码: public class SomeSingleton { private Field field; public SomeSingleton() { field = someObject.getDeclaredField("fieldName"); field.setAccessible(true); } private void someMethod() { Object value = field.get(someObject); } } 这里已经 SomeSingleton 是个单例对象,field 只会反射一次,而且 setAccessible(true) 后已经避免了额外的访问权限检查。profile 出来的性能问题集中在 field.get(someObject) 上。 […]

文章来源:

Author:神仙
link:http://xiezhenye.com/2020/09/优化-java-反射字段访问.html