回答
JMX可以访问FreePhysicalMemorySize和TotalPhysicalMemorySize属性更多的内存java.lang:type = OperatingSystem。这些属性在JavaDocs中没有真正记录,所以它们可能无法在所有JVM和平台上得到保证,但它们对我来说是可用的(使用Sun的JVM)。
在Java代码中你可以通过访问该MBean:ManagementFactory.getOperatingSystemMXBean()
这些属性是documented in the JavaDoc for Sun's implementation所以我觉得你可以依靠他们,如果你的应用程序在他们的JVM上运行。
简短的回答:没有,没有可移植的方式来获得总RAM。
当然,有一个非常简单的方法可以获得总的JVM内存(java.lang.Runtime.maxMemory()
),但这不是你所追求的。
要获得总系统RAM大小,你需要求助于原生系统调用(这是完全不可移植)。
我很害怕。谢谢不过:-) 我想我将不得不写一个顶部| grep for linux,并为Windows提出了一些奇特的解决方案。 – 2009-12-16 14:05:54
你可以使用JNI调用来查询本地操作系统
,但你将不得不重新启动JVMwith新的内存参数,如果你想为JMV
“可用RAM的最大数量” - 所以不是我假设安装的物理RAM?但是(1)可被OS访问的部分,(2)不用于存储OS代码,以及(3)不用于存储OS数据?
问题是,当操作系统将脏页面刷新到磁盘时,此答案每毫秒更改一次,从而减少上面的第(3)部分。如果真的需要RAM,操作系统通常会将部分内存交换出去,因此为(2)分配的RAM数量也是模糊的。
我们可能需要跳过虚拟系统本身在虚拟机中运行的情况,因此您需要在虚拟机的操作系统中安装JVM。
- 1. 矢量调整大小 - 便携式检测方式
- 2. 是否有OS X的便携式GCC?
- 3. 有没有一种使用unix shell命令来判断是否有配置的IPv6接口的便携方式?
- 4. c# - 有没有一种更简洁的方式来检查变量是否是多种事情之一?
- 5. 最好的方法来检查一个URL是否有效
- 6. 是否有一种便携的方式来生成真正的随机全局唯一标识符(guid)?
- 7. 是否有一种方法来获取NSMutableArray的最大值和最小值
- 8. 便携式方式
- 9. 哪一种更有效的方法来检查count()函数是否为空
- 10. 使用boost :: asio是否有一种便携的方式来找出免费的端口号
- 11. size_t是否便携?
- 12. 有没有一种方便的方式来查找使用STL的容器中的最大元素?
- 13. jQuery决策树,是否有比这更便携的方式?
- 14. 有没有一种简单的方法来检查字段是否为null?
- 15. Java便携式媒体检测
- 16. 一种方法来检查浏览器是否支持otf
- 17. 如何检查文件是否以便携方式存在于C++中?
- 18. 是否有一种紧凑的方法来定义因变量?
- 19. 是否有任何方便的方法来定期检查线程状态?
- 20. 另一种检查图像url的方法是否有效
- 21. 在Rails中,是否有一种简单的方法来检查ActiveRecord的属性?
- 22. 有没有一种快速的方法来检查一个变量是否属于一个集合?
- 23. 在Java中查找总磁盘大小的便携方法(java 6之前)
- 24. 我有一种方法来检测apk是否被混淆了?
- 25. 最简单的方法来检查整数是+1或-1 Java
- 26. 有没有一种方法,我可以告诉Python来检查它是否是一个变量
- 27. python的hash()是否便携?
- 28. FB IOS SDK是否提供了一种方法来检查accesstoken的有效性?
- 29. 最有效的方法来检查,看看是否有一个SQL行
- 30. 在进入for循环之前是否有一种简短的方法来检查数组大小?
这可能偶尔会起作用。考虑到不同的JVM和操作系统,我不会指望它。 – 2009-12-16 14:29:58
经过测试。它适用于Unix和MacOS。 它不是100%可移植的,因为您必须将MXbean对象转换为特定于系统的MX Bean,但仍然是一个不错的解决方案。 – 2009-12-16 14:51:12