不幸的是,在大量类上调用redefine / retransform有点慢,很容易花费几分钟。前面甚至还有一个错误被关闭了,因为"不能解决问题":JDK-6173565 : RedefineClasses must be fast even when hundreds or thousands of classes are redefined(注意:我知道这是一个老bug,但即使使用JDK8它很慢; ~~ 4500分钟~2分钟
我有一个用例,理想情况下我需要能够在某些类的原始版本和已检测的类之间快速切换。
一个"解决方案"我想的是简单地在方法中编写一个if-else语句,并且几乎复制了方法体; if块包含原始版本,else包含修改版本。但这会影响应用程序代码的每个方法,所以即使总是运行ifs,我也会有一些开销。尚不确定jit如何能够优化它。根据快速JMH测试,调用一个简单的getter方法的开销是" if"里面大概是4-5%。当然,在一个真正的应用程序中应该少一点,因为有更多的指令要执行而不是我的愚蠢的测试用例,但不确定这是否是解决问题的好方法。
任何其他想法如何在启用和禁用功能时如何防止等待多分钟?