Code出处:http://hellojava.info/?p=119


# vi codecache.java    #名称应尽量与public class后面的名称一样。

import java.io.File;

 

import javax.management.MBeanServerConnection;

import javax.management.ObjectName;

import javax.management.remote.JMXConnector;

import javax.management.remote.JMXConnectorFactory;

import javax.management.remote.JMXServiceURL;

 

import com.sun.tools.attach.VirtualMachine;

 

public class codecache {

 

    private static final String CONNECTOR_ADDRESS = 

            "com.sun.management.jmxremote.localConnectorAddress";

 

    public static void main(String[] args) throws Exception {

        if(args.length != 1){

            System.err.println("Must enter one arg: pid");

            System.exit(0);

        }

        VirtualMachine vm = VirtualMachine.attach(args[0]);

        JMXConnector connector = null;

        try {

            String connectorAddress = vm.getAgentProperties().getProperty(

                    CONNECTOR_ADDRESS);

 

            if (connectorAddress == null) {

                String agent = vm.getSystemProperties()

                        .getProperty("java.home")

                        + File.separator

                        + "lib"

                        + File.separator + "management-agent.jar";

                vm.loadAgent(agent);

 

                connectorAddress = vm.getAgentProperties().getProperty(

                        CONNECTOR_ADDRESS);

            }

 

            JMXServiceURL url = new JMXServiceURL(connectorAddress);

            connector = JMXConnectorFactory.connect(url);

            MBeanServerConnection mbeanConn = connector.getMBeanServerConnection();

            ObjectName name = new ObjectName(

                    "java.lang:type=MemoryPool,name=Code Cache");

            System.out.println(mbeanConn.getAttribute(name, "Usage"));

        } 

        finally {

            if(connector != null)

                connector.close();

            vm.detach();

        }

    }

 

}

# javac -verbose codecache.java 

  [search path for class files............... /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/lib/ext/dnsns.jar.......

  codecache.java:9: package com.sun.tools.attach does not exist    #如果报此错误,则说明tools.jar包没找到。

  import com.sun.tools.attach.VirtualMachine;   

# ln -sv /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/lib/tools.jar /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/tools.jar

# javac -verbose codecache.java               #编译通过。  

# java codecache JavaPid                      #测试是否能正常运行。



# jar -cvf codecache.jar codecache.class    #下面步骤用于生成jar文件。

  added manifest

  adding: codecache.class(in = 2298) (out= 1219)(deflated 46%)

# java -jar codecache.jar

  no main manifest attribute, in codecache.jar

# jar -xf codecache.jar

# cp /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/lib/ext/tools.jar ./

# vim META-INF/MANIFEST.MF 

  Manifest-Version: 1.0

  Created-By: 1.7.0_75 (Oracle Corporation)

  Class-Path: tools.jar

  Main-class: codecache           #添加此行,并在后面添加一个空行。


# rm -rf codecache.jar

# jar -cvfm codecache.jar META-INF/MANIFEST.MF codecache.class

# java -jar codecache.jar 27696

javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),contents={committed=22085632, init=2555904, max=67108864, used=20885568})

上面的信息显示Code Cache区域初始化的时候为2555904,最大为67108864,已占用了22085632,使用了20885568。