`
liuwei_blog
  • 浏览: 91260 次
  • 性别: 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 ========= -->

分享到:
评论

相关推荐

    jaxrs-people:具有Hibernate OGM,WildFly和Arquillian Cube的JAX-RS CRUD

    具有Hibernate OGM和Arqillian多维数据集单元测试的JAX-RS Web服务示例该项目包含两个JAX-RS Web服务的实现: 记忆服务返回查询java.lang.management.MemoryMXBean的结果人事服务演示对存储在Mongo数据库中的任意...

    单片机开发资源:基于51单片机的开发程序

    单片机开发资源,基于51单片机的开发程序,供学习参考。

    node-v9.4.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于固件库新建工程模板工程源码

    【工程源码】

    node-v9.1.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.9.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024-2030中国板端光伏连接器市场现状研究分析与发展前景预测报告.docx

    2024-2030中国板端光伏连接器市场现状研究分析与发展前景预测报告

    基于QT+C++实现的随机图形验证码,带有一些可人的交互与动画+源码

    用法链接:https://menghui666.blog.csdn.net/article/details/138544047?spm=1001.2014.3001.5502 基于QT+C++实现的随机图形验证码,带有一些可人的交互与动画+源码 基于QT+C++实现的随机图形验证码,带有一些可人的交互与动画+源码 基于QT+C++实现的随机图形验证码,带有一些可人的交互与动画+源码 该项目实现了可交互的动画验证码控件,趣味性十足: 字符变换动画 噪音动画 可拖动交互

    操作系统实验-基于uCore OS内含源码以及说明书可以自己运行复现.zip

    操作系统实验-基于uCore OS内含源码以及说明书可以自己运行复现.zip

    2024-2030中国半导体零件清洗机市场现状研究分析与发展前景预测报告.docx

    2024-2030中国半导体零件清洗机市场现状研究分析与发展前景预测报告

    python教程-04-获取和设置标签内容(innerHTML).ev4.rar

    python教程-04-获取和设置标签内容(innerHTML).ev4.rar

    Qt数据可视化多种实现

    s 气泡图 s 面积图 s 雷达图 s 玫瑰图 s 3D图表

    windows10开始菜单磁贴背景是灰色的

    去白底图标

    001 定期同步mysql数据到es 删除数据库记录同时删除es记录 es全文搜索分词和高亮

    001 定期同步mysql数据到es 删除数据库记录同时删除es记录 es全文搜索分词和高亮

    汉字点阵滚动指示牌源程序.rar

    单片机学习代码资料

    node-v9.6.1-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2022级高等数学A2期中试题B.doc

    2022级高等数学A2期中试题B.doc

    新手指南之玩转实验楼内含源码以及说明书可以自己运行复现.zip

    新手指南之玩转实验楼内含源码以及说明书可以自己运行复现.zip

Global site tag (gtag.js) - Google Analytics