最近有人告诉我,如果你查看Java程序的调试信息,你可以获得比反射更多的信息。不过我意识到我真的不知道是什么,也许除了记忆位置之类的。那么,您还可以从调试信息中获得反射无法获得的信息(注意:我不是在谈论使用断点来获得实际的运行时值)?还有什么你可以通过反射获得的信息是你从调试器中无法获得的吗?
我假设"使用调试器信息"实际上是指"使用代理API",这是调试器(以及其他人)使用的。
答案相当多。
for启动时,JVMTI可以强制垃圾回收,这是纯java API无法做到的。对于特定类型的应用程序,这有时甚至对"生产"代码也很有用,这与普遍的看法相反。
您也可以在加载类时对其进行仪表化处理。这对于各种探查器工具、编译代码(加密的类文件)的模糊处理,甚至响应源代码的更改而动态更改加载的类都很有用(参见jrebel以获得一个好的示例)