ठीक है, लगता है कि आपके प्रतिबिंब का उपयोग करके प्रतिबंध बायपास कर सकते हैं:
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);
}
}
क्या आपने इसे पढ़ा: http://java.sun.com/developer/technicalArticles/J2SE/monitoring/? –
क्या आप एक्सेस प्रतिबंध नहीं उठा सकते हैं ताकि आप इसे जिस तरह से करना चाहते हैं, कर सकें? या तो आपको यह करने की ज़रूरत है और आपके पास पहुंच हो सकती है या आप ऐसा नहीं करते हैं जिस स्थिति में आपको कोशिश नहीं करनी चाहिए। –
@ पीटर लॉरी मैं प्रतिबंध नहीं उठा सकता (शायद एक कंपाइलर विकल्प है?) दूसरा विकल्प हैप डंप को दूसरी तरफ ट्रिगर करना है। – Chriss