当我使用java.lang.instrument.Instrumentation#redefineClasses()时,我应该将数组传递给函数吗?

时间:2016-08-30 09:36:47

标签: java arrays class instrumentation redefine

我使用java.lang.instrument.Instrumentation#redefineClasses()来重新定义现有的类。有时,我需要重新定义几个类。

如果我逐一重新定义课程,我会知道哪些课程成功,哪些课程失败。

但是将类重新定义在一个数组中以获得更多正确性是否更好?

2 个答案:

答案 0 :(得分:1)

  

如果我逐一重新定义课程,我会知道哪个是成功,哪个是   失败。

真。

  

但是将数组中重新定义的类放在一起是否更好   更正确吗?

我没有通过更正确的方式得到你的意思!但是,无论如何,根据我的理解,在一个类与其他类相互依赖的情况下,使用一组(数组)类可能特别有用。因此,在这种情况下,您可以通过在此方法中传递它们来重新定义这两个类。

此外,Java Documentation of Interface Instrumentation说:

  

此方法用于替换没有的类的定义   引用现有的类文件字节,就像人们可能会做的那样   从源代码重新编译以进行修复并继续调试。

     

...

     

此方法对集合进行操作,以便允许同时对多个类进行相互依赖的更改(重新定义   A类可能需要重新定义B类。

但是,请记住:

  

如果此方法抛出异常,则不会重新定义任何类。

答案 1 :(得分:1)

与单独传递每个类相比,批处理类的性能要高得多。

JVM需要暂停应用重定义的应用程序,这是一项相当昂贵的操作,因此值得分组。

此外,分组允许类的相互依赖的更改。