gpt4 book ai didi

java - Java 8 HotSpot VM 中任何 String 对象构造的通知

转载 作者:行者123 更新时间:2023-12-01 10:27:57 25 4
gpt4 key购买 nike

  1. 有没有一种方法可以在不编织或检测 rt.jar 的情况下获得对 String 类构造函数的所有调用(直接或使用反射)的通知?

  2. 此外,是否可以仅针对特定包内的调用过滤这些通知?

  3. 此外,是否可以使这些通知异步(如事件),以便实际的 JVM 调用不会减慢

我的用例是拦截正在创建的所有字符串,对内容进行模式匹配,并根据某些规则(全部在后端)作为某些平台组件的一部分引发更改。

由于我不想检测 rt.jar,因此 AspectJ 似乎没有问题(因为 LTW 无法在 java 核心类上完成)。 JVM TI 似乎是一个潜在的工具,但我不太确定如何实现它。

谢谢,哈里什

最佳答案

Is there a way to get notified on all invocations to constructor of String class (either directly or using reflection) without weaving or instrumenting rt.jar in compile time?

您没有编译 String 类,因此只能在运行时进行编织。是的,这是无需创建自定义 JVM 的唯一方法。

Further is it possible to filter these notifications only for calls within a specific package?

可以使用 Reflection.getCallerClass(n) 检查调用者

Further is it possible to make these notifications async (like events) so that actual JVM invocations are not slowed down

所有这些都是非常昂贵的,因为将工作传递给另一个线程。

make a pattern match on the content

与创建字符串相比,模式匹配的成本非常高。如果你不小心,你的应用程序将会减慢一两个数量级。我建议您重新考虑您的实际需求,看看是否有其他方法可以实现您想要做的事情。

您确定不想使用分析器来执行此操作吗?注意:即使是分析器通常也只进行子样本,例如每 10 次分配。有很多免费的,实际上有两个是 JVM 附带的。我建议使用 Flight Recorder 来跟踪分配,因为这样的开销非常低。

关于java - Java 8 HotSpot VM 中任何 String 对象构造的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com