public interface MemoryMXBean extends PlatformManagedObject
一个java虚拟机具有这个接口的实现类的一个实例。本实例实现此接口是一个MXBean可以通过调用ManagementFactory.getMemoryMXBean()
方法或从platform MBeanServer
方法得到的。
用于唯一标识在MBeanServer记忆系统的MXBean的ObjectName是:
java.lang:type=Memory
可以通过调用
PlatformManagedObject.getObjectName()
方法得到的。
堆可能是一个固定的大小,或可能会扩大和缩小。堆的内存不需要是连续的。
java虚拟机有一个零方法区是在所有线程共享。该方法区域属于非堆内存。它存储每个类结构,如运行时常量池、字段和方法数据,以及方法和构造函数的代码。它是在java虚拟机启动时创建。
方法区在逻辑上是heap的一部分但java虚拟机的实现可能不会选择对垃圾收集或紧凑。类似于堆,方法区域可能是一个固定的大小,或可能会扩大和缩小。该方法区域的内存不需要是连续的。
除了上述方法,java虚拟机的实现可能需要进行内部处理或优化属于非堆内存。例如,JIT编译器需要存储本地机器码翻译从java虚拟机代码的高性能存储器。
Memory pools
和
memory managers
是抽象的实体,监控和管理的java虚拟机的内存系统。
一个内存池是一个内存区域,java虚拟机管理。java虚拟机具有至少一个内存池,它可以创造或在执行删除内存池。内存池可以属于堆或非堆内存。
内存管理器负责管理一个或多个内存池。垃圾收集器是一种内存管理器负责回收内存无法访问对象所占据。一个java虚拟机可能有一个或更多的内存管理。它可以在执行过程中添加或删除内存管理器。内存池可以由多个内存管理器管理。
内存使用情况可以在三个方面进行监控:
MemoryPoolMXBean
指定界面。
内存使用监控机制是用于负载平衡或工作负载分配使用。例如,当它的内存使用超过一定的阈值时,一个应用程序将停止接收任何新的工作负载。它不是用于检测和从低内存条件恢复的应用程序。
这是一个NotificationEmitter
MemoryMXBean发出两种类型的内存notifications
如果内存池的任何一个支持usage threshold或collection usage threshold可通过调用MemoryPoolMXBean.isUsageThresholdSupported()
和MemoryPoolMXBean.isCollectionUsageThresholdSupported()
方法确定。
usage threshold exceeded notification
-用于通知一个内存池的内存使用量增加,已达到或超过其 usage threshold价值。collection usage threshold exceeded notification
-用于通知一个内存池的内存使用量大于或等于其 collection usage threshold在java虚拟机中,内存池未使用的对象回收已花费的努力。通知发出的一个Notification
实例的user data
设置为CompositeData
表示MemoryNotificationInfo
对象包含有关存储池的信息时,通知了。CompositeData包含属性的描述MemoryNotificationInfo
。
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);
ManagementFactory.getPlatformMXBeans(Class)
,
JMX Specification.,
Ways to Access MXBeans
Modifier and Type | Method and Description |
---|---|
void |
gc()
运行垃圾收集器。
|
MemoryUsage |
getHeapMemoryUsage()
返回用于对象分配的堆的当前内存使用情况。
|
MemoryUsage |
getNonHeapMemoryUsage()
返回非堆内存的当前内存使用情况,由java虚拟机。
|
int |
getObjectPendingFinalizationCount()
返回对象的终结是近似数待定。
|
boolean |
isVerbose()
测试如果存储系统详细输出启用。
|
void |
setVerbose(boolean value)
启用或禁用内存系统详细输出。
|
getObjectName
int getObjectPendingFinalizationCount()
MemoryUsage getHeapMemoryUsage()
在返回的内存使用中使用的内存量是由没有被收集的对象和垃圾对象占用的内存量,如果有。
MBeanServer访问:
的MemoryUsage映射的类型与属性中指定的MemoryUsage
CompositeData。
MemoryUsage
对象。
MemoryUsage getNonHeapMemoryUsage()
MBeanServer访问:
的MemoryUsage映射的类型与属性中指定的MemoryUsage
CompositeData。
MemoryUsage
对象。
boolean isVerbose()
void setVerbose(boolean value)
每次调用这个方法启用或禁用详细输出全球。
value
-
true启用详细输出;
false禁用。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“控制”)。
void gc()
gc()
实际上相当于电话:
System.gc()
System.gc()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.