【发布时间】:2013-12-30 21:21:04
【问题描述】:
我正在尝试将 eclipse 项目从 jdk 1.6 升级到 jdk 1.7 。
在编译过程中出现以下错误
import sun.management.ManagementFactory;
sun.management.ManagementFactory 类型不可见。
我尝试导入java.lang.management.ManagementFactory 来解决错误;但是下面的代码行抛出错误。
ManagementFactory.getDiagnosticMXBean().dumpHeap
错误:
The method getDiagnosticMXBean() is undefined for the type ManagementFactory.
有人可以帮助了解导致此问题的原因以及如何解决它吗?
【问题讨论】:
-
为什么要明确使用内部的非公共 API?
-
@chrylis :我是这个项目的新手,不知道为什么要使用它。据我所知,代码的目的是查看堆内存使用情况,如果它高于特定百分比,应用程序会尝试调用 gc(在运行时使用 .gc() 方法)并转储堆。
-
解决问题的唯一正确方法是消除内部 API 的使用。它们不仅可以在版本之间更改,而且仅仅尝试在不同的 VM 上运行可能会导致类加载器错误。
-
我认为这个答案也适用于这里:stackoverflow.com/a/4184068/772385 一般来说,像这样胡乱使用 JVM 的内部 API 并不是一个好主意。要分析堆,可能值得看一下 Eclipse MAT(eclipse.org/mat) 或 VisualVM(visualvm.java.net)