javaagent学习

AOP和IOC是J2EE的两大基石,传统的AOP是在代码层面的,在bytecode层面也有aop技术,就是基于JVMTI(JVM TOOL INTERFACE)的instrument技术。这里主要记录下instrument入门使用。

agent实例

public class SimpleJavaAgent {

    public static void premain(String args, Instrumentation instrumentation){
        System.out.println("Premain");
        System.out.println("Number of classes loaded: "+instrumentation.getAllLoadedClasses().length);
//        instrumentation.addTransformer(new DemoTransformer());
    }
}

maven打包


        
            
                
                
                
                
                    
                    
                        
                        
                            
                        
                        
                            
                        
                    
                
            

            
            
                maven-assembly-plugin
                
                    ${basedir}
                    
                        true
                        
                            true
                        
                        
                            com.geekyarticles.instrumentation.SimpleJavaAgent
                        
                    
                    
                        jar-with-dependencies
                    
                
            
        
    

执行mvn assembly:single

main实例

public class SimpleJavaAgentDemo {
    public static void main(String[] args) {
        System.out.println("Hello! its the main method");
    }
}

exec的maven配置


        
            
                org.codehaus.mojo
                exec-maven-plugin
                
                    
                        
                            exec
                        
                    
                
                
                    java
                    
                        
                        -javaagent:"${project.parent.basedir}${file.separator}simple-agent${file.separator}simple-agent-1.0-SNAPSHOT-jar-with-dependencies.jar"
                        -classpath
                        
                        com.geekyarticles.instrumentation.SimpleJavaAgentDemo
                    
                
            
        
    

执行mvn compile,然后mvn exec:exec

工程github

参考

  • implementing-aspect-oriented

  • java.lang.instrument笔记

  • Java Instrument简介

  • 如何精确地测量java对象的大小——底层instrument API

  • Java SE 6 新特性: Instrumentation 新功能

  • 使用Instrumentation类计算Java对象的大小

  • 构建Java Agent,而不是使用框架

  • JVM TI: How VM Agents Work

你可能感兴趣的:(jvm)