有没有办法在没有编织或检测rt.jar的情况下,对String类的构造函数(直接或使用反射)进行所有调用的通知?
此外,是否可以仅针对特定套餐内的来电过滤这些通知?
此外,可以使这些通知异步(如事件),以便实际的JVM调用不会减慢
我的用例是拦截正在创建的所有字符串,在内容上进行模式匹配,并根据某些规则(所有在后端)进行更改,作为某个平台组件的一部分。
由于我不想使用rt.jar,AspectJ似乎是不可能的(因为LTW无法在java核心类上完成)。 JVM TI似乎有潜在的工具,但我不确定如何实现它。
谢谢, 哈里什
答案 0 :(得分:1)
有没有办法在编译时编织或检测rt.jar的情况下,在String类的构造函数(直接或使用反射)的所有调用上得到通知?
您没有编译String类,因此您只能在运行时进行编织。是的,这是没有创建自定义JVM的唯一方法。
此外,是否可以仅针对特定包中的呼叫过滤这些通知?
可以使用Reflection.getCallerClass(n)
检查调用者此外,可以使这些通知异步(如事件),以便实际的JVM调用不会减慢
所有这些都非常昂贵,因为将工作传递给另一个线程。
在内容上进行模式匹配
与创建String相比,模式匹配非常昂贵。如果你不小心,你会使你的应用程序减慢一两个数量级。我建议你重新考虑一下你的实际要求,看看是否有其他方法可以解决你想做的事情。
您确定不想使用分析器来执行此操作。注意:偶数分析器通常只进行子样本处理,例如每10次分配。有很多免费的,实际上有两个附带JVM。我建议使用Flight Recorder来跟踪分配,因为它的开销非常低。