`
liuwei_blog
  • 浏览: 94860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MemoryMXBean

    博客分类:
  • java
阅读更多

 

本文来源:jdk1.6中文文档

java.lang.management
接口 MemoryMXBean


public interface MemoryMXBean

Java 虚拟机内存系统的管理接口。

Java 虚拟机具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean ,可以通过调用 ManagementFactory.getMemoryMXBean() 方法或从平台 MBeanServer 方法获得。

在 MBeanServer 中唯一标识内存系统的 MXBean 的 ObjectName 为:

java.lang:type=Memory

内存

Java 虚拟机的内存系统管理以下类型的内存:

1. 堆

Java 虚拟机具有一个 ,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。对象的堆内存由称为垃圾回收器 的自动内存管理系统回收。

堆的大小可以固定,也可以扩大和缩小。堆的内存不需要是连续空间。

2. 非堆内存

Java 虚拟机管理堆之外的内存(称为非堆内存 )。

Java 虚拟机具有一个由所有线程共享的方法区 。方法区属于非堆内存。它存储每个类结构,如运行时常量池、字段和方法数据,以及方法和构造方法的代码。它是在 Java 虚拟机启动时创建的。

方法区在逻辑上是堆的一部分,但 Java 虚拟机实现可以选择不对其进行回收或压缩。与堆类似,方法区的大小可以固定,也可以扩大和缩小。方法区的内存不需要是连续空间。

除了方法区外,Java 虚拟机实现可能需要用于内部处理或优化的内存,这种内存也是非堆内存。例如,JIT 编译器需要内存来存储从 Java 虚拟机代码转换而来的本机代码,从而获得高性能。

内存池和内存管理器

内存池 内存管理器 都是抽象实体,对 Java 虚拟机的内存系统进行监视和管理。

内存池表示 Java 虚拟机管理的内存区域。Java 虚拟机至少有一个内存池,而且可以在执行期间创建或删除内存池。内存池可以是堆内存,也可以是非堆内存。

内存管理器负责管理一个或多个内存池。垃圾回收器就是一种内存管理器,负责回收不可到达对象占用的内存。Java 虚拟机可以有一个或多个内存管理器。可以在运行期间添加或删除内存管理器。一个内存池可以由多个内存管理器进行管理。

内存使用量监视

对于内存系统而言,内存使用量是一个非常重要的监视属性。例如,内存使用量可以指示:

  • 应用程序的内存使用量,
  • 自动内存管理系统上的工作负载,
  • 潜在的内存泄漏。

可以采用三种方式监视内存使用量:

  • 轮询
  • 使用量阈值通知
  • 集合使用量阈值通知

具体细节在 MemoryPoolMXBean 接口中指定。

内存使用量监视机制旨在用于负载平衡或工作负载分布。例如,应用程序在其内存使用量超过特定阈值时,将会停止接收任何新的工作负载。它不适合用于供应用程序进行检测并从低内存情况恢复。

通知

MemoryMXBean 是一个 NotificationEmitter ,如果任何一个内存池支持使用量阈值集合使用量阈值 (可以通过调用 MemoryPoolMXBean.isUsageThresholdSupported() MemoryPoolMXBean.isCollectionUsageThresholdSupported() 方法确定),它将发出两种类型的通知

发出的通知是一个 Notification 实例,其用户数据 设置为 CompositeData (表示包含构造该通知时内存池信息的 MemoryNotificationInfo 对象)。CompositeData 包含 MemoryNotificationInfo 中描述的各个属性。


NotificationEmitter

ManagementFactory.getMemoryMXBean() 返回的 MemoryMXBean 对象实现了 NotificationEmitter 接口,该接口允许在 MemoryMXBean 中将侦听器注册为通知侦听器。 以下示例代码将注册 MyListener 以处理 MemoryMXBean 发出的通知。

 class MyListener implements javax.management.NotificationListener {
     public void handleNotification(Notification notif, Object handback) {
         // handle notification
         ....
     }
 }

 MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
 NotificationEmitter emitter = (NotificationEmitter) mbean;
 MyListener listener = new MyListener();
 emitter.addNotificationListener(listener, null, null);
 

 

 

从以下版本开始:
1.5
另请参见:
JMX Specification. , Ways to Access MXBeans

<!-- ========== METHOD SUMMARY =========== --><!-- -->

方法摘要
void gc ()
运行垃圾回收器。
MemoryUsage getHeapMemoryUsage ()
返回用于对象分配的堆的当前内存使用量。
MemoryUsage getNonHeapMemoryUsage ()
返回 Java 虚拟机使用的非堆内存的当前内存使用量。
int getObjectPendingFinalizationCount ()
返回其终止被挂起的对象的近似数目。
boolean isVerbose ()
测试内存系统的 verbose 输出是否已启用。
void setVerbose (booleanvalue)
启用或禁用内存系统的 verbose 输出。

<!-- ============ METHOD DETAIL ========== --><!-- -->

方法详细信息

<!-- -->

getObjectPendingFinalizationCount

int getObjectPendingFinalizationCount
()
返回其终止被挂起的对象的近似数目。

 

返回:
其终止被挂起的对象的近似数目。

<!-- -->

getHeapMemoryUsage

MemoryUsage
 getHeapMemoryUsage
()
返回用于对象分配的堆的当前内存使用量。堆由一个或多个内存池组成。返回的内存使用量中的已使用 大小和已提交 大小为所有堆内存池的对应值的总和,而返回的内存使用量中表示堆内存设置的初始 大小和最大 大小则可能不等于所有堆内存池对应值的总和。

返回的内存使用量中已使用内存量为活动对象和尚未回收的垃圾对象(如果有)所占用内存的总量。

MBeanServer 访问
MemoryUsage 的映射类型为 CompositeData ,具有 MemoryUsage 中指定的属性。

 

返回:
表示堆内存使用量的 MemoryUsage 对象。

<!-- -->

getNonHeapMemoryUsage

MemoryUsage
 getNonHeapMemoryUsage
()
返回 Java 虚拟机使用的非堆内存的当前内存使用量。非堆内存由一个或多个内存池组成。返回的内存使用量中的已使用 大小和已提交 大小为所有非堆内存池的对应值的总和,而返回的内存使用量中表示非堆内存设置的初始 大小和最大 大小则可能不等于所有非堆内存池对应值的总和。

MBeanServer 访问
MemoryUsage 的映射类型为 CompositeData ,具有 MemoryUsage 中指定的属性。

 

返回:
表示非堆内存使用量的 MemoryUsage 对象。

<!-- -->

isVerbose

boolean isVerbose
()
测试内存系统的 verbose 输出是否已启用。

 

返回:
如果启用了内存系统的 verbose 输出,则返回 true ;否则返回 false

<!-- -->

setVerbose

void setVerbose
(booleanvalue)
启用或禁用内存系统的 verbose 输出。verbose 输出信息和 verbose 信息发送到的输出流都与实现有关。通常,只要垃圾回收时释放了内存,Java 虚拟机实现就会输出一条消息。

此方法的每次调用都会全局启用或禁用 verbose 输出。

 

参数:
value - 为 true 将启用 verbose 输出;为 false 将禁用输出。
抛出:
SecurityException - 如果存在安全管理器,且调用方不具有 ManagementPermission("control")。

<!-- -->

gc

void gc
()
运行垃圾回收器。调用 gc() 实际上等同于调用:
 System.gc()
 

 

另请参见:
System.gc()

<!-- ========= END OF CLASS DATA ========= -->

分享到:
评论

相关推荐

    java获取cpu、内存信息

    MemoryMXBean memoryMxBean = ManagementFactory.getMemoryMXBean(); MemoryUsage heapMemoryUsage = memoryMxBean.getHeapMemoryUsage(); MemoryUsage nonHeapMemoryUsage = memoryMxBean.getNonHeapMemoryUsage...

    Java获取系统CPU、内存、硬盘等系统信息

    MemoryMXBean memoryMxBean = ManagementFactory.getMemoryMXBean(); MemoryUsage heapMemoryUsage = memoryMxBean.getHeapMemoryUsage(); MemoryUsage nonHeapMemoryUsage = memoryMxBean.getNonHeapMemoryUsage...

    java写的用仪表盘读CPU

    `MemoryMXBean`可以获取内存使用情况的总览,而`MemoryUsage`则用于详细查看各个内存区域(如堆、非堆、代码缓存等)的使用情况。你可以通过以下步骤获取内存信息: 1. **获取MemoryMXBean实例**: 使用`...

    java获取系统信息的类文件

    4. **`java.lang.management.MemoryMXBean`**: 提供了对JVM内存管理的访问,包括堆内存和非堆内存的信息。`MemoryMXBean`的实例可以通过`ManagementFactory.getMemoryMXBean()`获得。这个接口包含`...

    java_jiankong.rar_java_java程序

    在`java.lang.management`包中,`MemoryMXBean`接口提供了获取内存管理信息的方法。例如,我们可以获取`MemoryUsage`对象,它包含了堆内存(Heap Memory)和非堆内存(Non-Heap Memory)的使用细节。`...

    检测JSP服务器内存

    这个脚本可能使用Java的`java.lang.Runtime`或`java.lang.management.MemoryMXBean`接口来获取系统内存信息,包括总内存、已分配内存、空闲内存等。例如,可以使用以下Java代码: ```java import java.lang....

    Java获取计算机CPU、内存等信息

    Java提供`MemoryMXBean`和`MemoryPoolMXBean`接口来获取内存使用情况。以下代码展示了如何获取总的物理内存和Java堆内存的信息: ```java import java.lang.management.ManagementFactory; import java.lang....

    demo_java_DEMO_

    Java提供了一个`MemoryMXBean`接口,它允许我们获取JVM的内存使用情况。同样,我们需要获取其实例: ```java MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); MemoryUsage heapMemoryUsage = ...

    Java 服务器信息监控

    `Runtime`类可以提供系统总的内存信息,而`MemoryMXBean`则可以获取堆内存、非堆内存以及垃圾回收器的状态。通过这些信息,我们可以监控内存使用情况,防止内存泄漏,并适时调整JVM的内存配置。 网络监控通常涉及...

    java 监视内存的使用情况

    而`MemoryMXBean`则提供了更深入的内存管理信息,包括堆内存、非堆内存(如元空间)的使用情况,以及垃圾收集器的状态。 为了监控内存分配和回收,我们可以使用`java.lang.instrument.Instrumentation`接口,配合预...

    动态显示JSP服务器内存的Ajax程序 图像版.zip

    此程序可能使用了Java提供的API,如`java.lang.Runtime`或`java.lang.management.MemoryMXBean`来获取服务器的内存统计数据,如堆内存、非堆内存、垃圾收集器状态等。 Ajax的核心在于XMLHttpRequest对象,它允许...

    [其他类别]动态显示JSP服务器内存的Ajax程序 图像版_systemjc.zip

    2. Java后台:处理Ajax请求,获取服务器的内存统计数据,如堆内存、非堆内存、垃圾回收等信息,可能使用Java的`java.lang.Runtime`或`java.lang.management.MemoryMXBean`等类。 3. JavaScript/Ajax代码:负责在...

    [其他类别]检测JSP服务器内存的Ajax程序_systemjc.zip

    服务器端的JSP页面接收到请求后,可以调用Java的内置内存管理API,如`java.lang.Runtime`和`java.lang.management.MemoryMXBean`,来获取内存信息,包括堆内存(Heap Memory)、非堆内存(Non-Heap Memory)、垃圾...

    Java SE 6 中监视和诊断性能问题1

    例如,`ClassLoadingMXBean`可以提供关于已加载类的数量等信息,而`MemoryMXBean`则能提供内存使用情况。 要与这些MXBeans交互,有两种主要途径:直接访问MXBean接口和通过MBeanServer接口间接访问。直接访问允许...

    小小Demo获取系统监控数据

    在Java中,可以使用`java.lang.management`包提供的`MemoryMXBean`接口来获取内存使用情况。通过`OperatingSystemMXBean`,我们可以获取到系统总内存、已用内存、空闲内存等数据。此外,还可以监控堆内存和非堆内存...

    获取正在运行进程的实例

    MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage(); System.out.println("堆内存使用: " + heapUsage.getUsed() + " 字节, 总量: " + ...

    检测JSP服务器内存的Ajax程序-systemjc.zip

    这可能涉及Java的内置内存管理API,如`Runtime.getRuntime()`或`MemoryMXBean`,来获取内存统计信息。 3. 数据解析和展示:客户端JavaScript接收到服务器返回的数据后,需要解析并将其展示在网页上,可能通过图表...

    JSP.Ajax.example.memory.test.dynamic.display.rar_memory

    例如,可能使用了`java.lang.Runtime`类或`java.lang.management.MemoryMXBean`来监控堆内存、非堆内存和垃圾回收的状态。 JSP页面可能返回这些内存数据,然后Ajax回调函数接收这些数据并在客户端(浏览器)端动态...

    动态显示JSP服务器内存的Ajax程序 图像版-systemjc

    例如,我们可以通过`MemoryMXBean`和`MemoryUsage`接口获取堆内存的使用情况。 接下来,我们需要创建一个Ajax请求来定期(比如每隔几秒)调用服务器上的一个JSP页面,这个页面会返回当前的内存使用数据。在JSP中,...

Global site tag (gtag.js) - Google Analytics