`
RednaxelaFX
  • 浏览: 3017555 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

观察NIO的direct memory使用量?

    博客分类:
  • Java
阅读更多
前几天有同事问起,我本来印象中是有啥别的办法的,但想不起来了。
再看了看NIO相关部分的源码觉得貌似就这个办法靠谱(在Oracle/Sun的JDK上):
StackOverflow: Looking up how much direct buffer memory is available to Java?
通过反射获取java.nio.Bits类里的maxMemory与reservedMemory字段来达到观察的目的。

用Groovy演示一下:
D:\sdk\groovy-1.7.6\bin>groovysh
Groovy Shell (1.7.6, JVM: 1.6.0_26)
Type 'help' or '\h' for help.
-------------------------------------------------------------------------------
groovy:000> import java.nio.*
===> [import java.nio.*]
groovy:000> Bits.reservedMemory
===> 0
groovy:000> Bits.maxMemory
===> 67108864
groovy:000> buf = ByteBuffer.allocateDirect(4096)
===> java.nio.DirectByteBuffer[pos=0 lim=4096 cap=4096]
groovy:000> Bits.reservedMemory
===> 4096
groovy:000> Bits.maxMemory
===> 129761280
groovy:000> buf.direct
===> true
groovy:000> buf.hasArray()
===> false
groovy:000> buf.cleaner().clean()
===> null
groovy:000> Bits.reservedMemory
===> 0
groovy:000> Bits.maxMemory
===> 129761280
groovy:000> quit


虽说HotSpot VM有个VM参数叫做MaxDirectMemorySize,但实际上HotSpot VM并没使用这个参数,而是直接把它交给Java层,由NIO的Java部分来使用它。NIO的direct memory的分配和释放过程也没啥JMX之类的监控,完全是裸的,除了反射去暴力获取数据我还真不知道有啥办法了。

但这种暴力做法未必能持续靠谱。
例如说这里就有个patch稍微改变过Bits类的字段:http://cr.openjdk.java.net/~alanb/4837564/jdk/jdk.patch
反正是private的,改了也不需要通知普通的Java用户。

这么重要的数据居然没有合适的API去监控,真不爽…
分享到:
评论

相关推荐

    BIO,NIO,AIO,Netty面试题.pdf

    BIO,NIO,AIO,Netty面试题

    Java NIO原理和使用

    NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册...

    java NIO原理和使用

    java nio 附带例子 以及原理 java nio 附带例子 以及原理 java nio 附带例子 以及原理 java nio 附带例子 以及原理

    Java IO, NIO and NIO.2 原版pdf by Friesen

    and Direct Memory Access. Chapters 2 through 5 cover classic I/O APIs. You learn about the File and RandomAccessFile classes along with streams (including object serialization and externalization) and...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    基于Groovy的NIO框架,仅供学习Java NIO使用。.zip

    基于Groovy的NIO框架,仅供学习Java NIO使用。

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    基于netty的nio使用demo源码

    基于netty的nio使用demo源码

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    NIO 入门.chm,NIO 入门.chm

    NIO入门.chm NIO入门.chm NIO入门.chm

    Java NIO 英文文字版

    ll learn how to put these tools to work using examples of common, real-world I/O problems and see how the new features have a direct impact on responsiveness, scalability, and reliability. The book ...

    第11讲 Java提供了哪些IO方式? NIO如何实现多路复用?1

    第三,在 Java 7 中,NIO 有了进一步的改进,也就是 NIO 2,引入了异步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

    java NIO.zip

    java NIO.zip

    Java NIO系列教程(一) Java NIO 概述

    Java NIO系列教程(一) Java NIO 概述

    Java NIO英文高清原版

    Java NIO英文高清原版

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    NIO和AIO介绍

    NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍NIO和AIO介绍

Global site tag (gtag.js) - Google Analytics