• godtrue
    2018-10-13
    阅过留痕

    1:Java agent 是啥玩意?
          这个概念老师没有详细讲解,我的理解是Java语言的一个特性,这个特性能够实现Java字节码的注入

    2:Java字节码的注入有什么用处呢?
    在平时编程几乎没有使用到这方面的功能,应该是在一些框架的设计的时候才使用吧!比如:专栏中提到的面相切面编程。

    3:Java agent 本质上是通过 c agent 来实现的,那 c agent 本质上是怎么实现的呢?
    C agent是一个事件驱动的工具实现接口,通常我们会在 C agent 加载后的入口方案 Agent_OnLoad处注册各个事件的钩子方法。当Java虚拟机触发了这些事件时,便会调用对应的钩子方法

    4:留个话头
          写代码实现某些功能,我的理解有三个时间段
          第一个:源码阶段,最常用的,也是编程的主要活动时间
          第二个:字节码阶段,有些功能可能会在加载字节码时修改或者添加某些字节码,某些框架做的事情
          第三个:运行阶段,某些工具,在程序运行时修改代码,实现运行时功能分支的控制
    展开
    
     8
  • 小美
    2018-11-19
    用attach的方式注入字节码的时候遇到了99线升高的性能问题,看一些资料说 class redefinition 的时候会阻塞线程。请问能详细讲下吗?

    作者回复: 你是在做redefine时出问题,还是没触发时便已出问题?

    class redefinition需要爬每个线程的Java栈,检查有没有用到被redefine的类的方法,因此会stop-the-world。另外,redefine后,JIT’ed代码会被抛弃,重新解释执行

    
     5
  • feng
    2018-10-07
    第一个实验做的不严谨,第一,木有定义HelloWord类,第二,没有执行编译操作,不知道是有意为之,还是不小心把步骤漏掉了
    
     4
  • Scott
    2018-10-06
    我看到了jvmti可以回调异常事件,但是java.lang.instrument包下没有处理这个事件的,只能在load时回调,处理异常究竟是怎么做的?

    作者回复: Instrumentation包并没有所有JVMTI功能

    
     1
  • Scott
    2018-10-06
    出方法时需要注入的字节码除了返回,还有几种情况,如果没有catch块,就拦截throw,如果有,但是catch块里面可能有很多层,只是遍历inst应该是不可以的

    作者回复: 其实不用管有没有catch块,有没有throw,直接给所有代码罩一个catch any的异常处理就行了

    
     1
  • 饭粒
    2019-12-28
    profiler 示例,文中省略了 HelloWorld.java 和编译提及下更好。
    # cat HelloWorld.java

    public class HelloWorld {

        public static void main(String[] args) {
            System.out.println("Hello World!");
            HelloWorld w = new HelloWorld();
        }
    }

    # java -javaagent:myagent.jar -cp $CLASS_PATH:./asm-7.0-beta.jar:./asm-tree-7.0-beta.jar HelloWorld
    Hello World!
    HelloWorld: 1
    展开
    
    
  • 随心而至
    2019-11-01
    把老师给的程序都跑了一篇,发现想要彻底搞懂,还需要多学习,C/C++的知识不能丢了,因为HotSpot JVM 的源码基本上都是用它来实现的。
    不过跑了一下代码,最起码可以表面上搞懂了像Lombok,AOP这些都是如何实现的。
    
    
  • 一缕阳光
    2019-07-07
    实习的时候有幸做过一个利用Instrumentation实现自动打点和性能监控的项目。受益匪浅啊 哈哈哈哈 ,不得不说里面坑还是挺多的
    
    
  • 奇奇
    2019-04-29
    ASM7 GETSTATIC这些常量是哪里来的?
    
    
  • feng
    2018-10-07
    还有个问题想请教下,每次启动的时候都会打印如下信息,objc[2614]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/bin/java (0x102f6f4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x104f384e0). One of the two will be used. Which one is undefined.

    请问怎么可以消除,谢谢
    展开
    
    
我们在线,来聊聊吧