java – 从应用程序内创建堆转储,不需要HotSpotDiagnosticMXBean
发布时间:2020-12-14 05:33:57 所属栏目:Java 来源:网络整理
导读:如何在我的应用程序内创建堆转储,而不使用HotSpotDiagnosticMXBean类. 由于 java / rt.jar的访问限制,我无法使用依赖关系对HotSpotDiagnosticMXBean进行编译.我知道如何解决eclipse.compiler错误,但是我如何解决它的构建? 有没有办法通过编程方式创建堆转储
如何在我的应用程序内创建堆转储,而不使用HotSpotDiagnosticMXBean类.
由于 java / rt.jar的访问限制,我无法使用依赖关系对HotSpotDiagnosticMXBean进行编译.我知道如何解决eclipse.compiler错误,但是我如何解决它的构建? 有没有办法通过编程方式创建堆转储? >这个解决方案不行,因为它是HotSpotDiagnosticMXBean依赖关系:HotSpot-dependent Heap Dump 解决方法
好的,好像你可以通过使用反射来绕过限制:
package lab.heapdump; import javax.management.MBeanServer; import java.lang.management.ManagementFactory; import java.lang.reflect.Method; @SuppressWarnings("restriction") public class HeapDump { // This is the name of the HotSpot Diagnostic MBean private static final String HOTSPOT_BEAN_NAME = "com.sun.management:type=HotSpotDiagnostic"; // field to store the hotspot diagnostic MBean private static volatile Object hotspotMBean; /** * Call this method from your application whenever you * want to dump the heap snapshot into a file. * * @param fileName name of the heap dump file * @param live flag that tells whether to dump * only the live objects */ static void dumpHeap(String fileName,boolean live) { // initialize hotspot diagnostic MBean initHotspotMBean(); try { Class clazz = Class.forName("com.sun.management.HotSpotDiagnosticMXBean"); Method m = clazz.getMethod("dumpHeap",String.class,boolean.class); m.invoke( hotspotMBean,fileName,live); } catch (RuntimeException re) { throw re; } catch (Exception exp) { throw new RuntimeException(exp); } } // initialize the hotspot diagnostic MBean field private static void initHotspotMBean() { if (hotspotMBean == null) { synchronized (HeapDump.class) { if (hotspotMBean == null) { hotspotMBean = getHotspotMBean(); } } } } // get the hotspot diagnostic MBean from the // platform MBean server private static Object getHotspotMBean() { try { Class clazz = Class.forName("com.sun.management.HotSpotDiagnosticMXBean"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); Object bean = ManagementFactory.newPlatformMXBeanProxy(server,HOTSPOT_BEAN_NAME,clazz); return bean; } catch (RuntimeException re) { throw re; } catch (Exception exp) { throw new RuntimeException(exp); } } public static void main(String[] args) { // default heap dump file name String fileName = "D:heap.bin"; // by default dump only the live objects boolean live = true; // simple command line options switch (args.length) { case 2: live = args[1].equals("true"); case 1: fileName = args[0]; } // dump the heap dumpHeap(fileName,live); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容