greys-anatomy icon indicating copy to clipboard operation
greys-anatomy copied to clipboard

jdk1.6.0_45 stack jdk方法

Open evazca opened this issue 7 years ago • 7 comments

写了个testcase main函数死循环调test函数,test函数new一个hashmap并且put了一个kv stack -n 2 java.util.HashMap put显示affect 0 0(* put一样)然而stack * test没有问题。greys版本为1.7.6.6

evazca avatar Feb 11 '18 13:02 evazca

java.util.HashMap 是系统类,默认不会作用的。

whitelilis avatar Feb 13 '18 01:02 whitelilis

那有没有办法作用?事实上本来的目标是为了stack throwable里的方法,也无法生效

evazca avatar Feb 13 '18 07:02 evazca

options unsafe true

oldmanpushcart avatar Feb 13 '18 07:02 oldmanpushcart

非常感谢,getstacktrace方法测试ok。然而fillinstacktrace方法可以affect却不能stack到请问是不是不支持?如果不能有哪些case不支持呢?比如native方法能不能?

evazca avatar Feb 13 '18 10:02 evazca

这是个好问题~有空梳理下,理论上除了

  • java.lang.String#
  • Integer#valueOf

都应该能被支持才对,我比较好奇你的fillinstacktrace理论上应该是能被支持的,报什么错了么?

oldmanpushcart avatar Feb 27 '18 07:02 oldmanpushcart

没有报错并且看affect信息 class和method都有数字,看上去是ok的。问题是一直在等待,仿佛没有调用一样。 测试代码就是死循环调用thread.currentThread().getstackTrace();(New exception()).fillInStaceTrace();

发现* getstacktrace可以stack,* fillinstacktrace不能一直在等待。理论上前一个函数会调用后一个显示执行也不能捕获

ps:实际问题是druid的某个开关打开后会频繁getstacktrace……本来是perf到fillinstacktrace的,因为不能stack才尝试找getstacktrace

evazca avatar Mar 07 '18 07:03 evazca

明白了,递归调用了。先不要观察fillinstacktrace,我在2.0中想办法解决掉这个问题。

oldmanpushcart avatar Mar 07 '18 09:03 oldmanpushcart