java - 如何让机器直接记忆?
问题描述
我目前正在尝试获取服务器直接内存值并将其存储到数据库中,但是我一直在获取0
值,我的方法是否无法返回正确的500 MB
.
我的方法是这样的:
import java.lang.management.BufferPoolMXBean;
import java.lang.management.ManagementFactory;
...
public int toGb(long valueInBytes) {
return (int) (valueInBytes / (1024 * 1024 * 1024));
}
public int getMemoryDirect() {
long memoryDirect = 0;
List<BufferPoolMXBean> pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
for(BufferPoolMXBean pool : pools) {
if(pool.getName().equals("direct")) {
memoryDirect = pool.getTotalCapacity();
}
}
return toGb(memoryDirect);
}
还有其他方法可以检索此值吗?
任何帮助都可以接受 :)
解决方案
您的问题可能出在toGb
方法上。在 Java 中,整数除法是截断。这意味着,如果您有 500 MB 打算由方法 (500*1024*1024) 返回并打算将其作为整数 GB 值返回,则除以 (1024*1024*1024),它将始终返回 0。您可以通过尝试返回浮点值(例如 double 或 float)来解决此问题。
或者,memoryDirect
如果没有池名称等于“直接”,则您的变量可能从未设置过。在这种情况下,memoryDict 也将始终为 0。
推荐阅读
- python - 使用Python中的index()以外的方法将字符串中的每个第二个字母变为大写?
- javascript - 更改导航栏的不透明度而不更改导航栏上文本的不透明度
- sql-server - 递增地添加字符串类型列的行值
- javascript - Javascript OR 条件运算符未按预期工作
- java - 无法从一个活动获取数据到另一个活动Android
- deep-learning - 什么是“语义驱动的重构”
- firebase-authentication - 使用用户设备授权扩展 Firebase 身份验证
- javascript - JavaScript 语音合成不工作
- powershell - Powershell - 如何从变量中过滤值?
- javascript - 打字稿中的装饰器语法