当前位置:首页 > Java

java如何过去内存

2026-03-23 13:09:16Java

Java 获取内存信息的方法

在 Java 中可以通过多种方式获取内存信息,包括堆内存、非堆内存以及操作系统的总内存等。以下是几种常见的方法:

使用 Runtime 类获取内存信息

Runtime 类提供了一些方法用于获取 JVM 的内存使用情况:

java如何过去内存

Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory(); // 当前 JVM 分配的总内存(字节)
long freeMemory = runtime.freeMemory();  // 当前 JVM 空闲内存(字节)
long usedMemory = totalMemory - freeMemory; // 已使用内存
long maxMemory = runtime.maxMemory();    // JVM 可申请的最大内存(字节)

System.out.println("Total Memory: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("Free Memory: " + freeMemory / (1024 * 1024) + " MB");
System.out.println("Used Memory: " + usedMemory / (1024 * 1024) + " MB");
System.out.println("Max Memory: " + maxMemory / (1024 * 1024) + " MB");

使用 ManagementFactory 获取详细内存信息

ManagementFactory 提供了更详细的内存监控接口,可以获取堆内存和非堆内存的使用情况:

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();

System.out.println("Heap Memory Usage:");
System.out.println("  Init: " + heapMemoryUsage.getInit() / (1024 * 1024) + " MB");
System.out.println("  Used: " + heapMemoryUsage.getUsed() / (1024 * 1024) + " MB");
System.out.println("  Committed: " + heapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");
System.out.println("  Max: " + heapMemoryUsage.getMax() / (1024 * 1024) + " MB");

System.out.println("Non-Heap Memory Usage:");
System.out.println("  Init: " + nonHeapMemoryUsage.getInit() / (1024 * 1024) + " MB");
System.out.println("  Used: " + nonHeapMemoryUsage.getUsed() / (1024 * 1024) + " MB");
System.out.println("  Committed: " + nonHeapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");
System.out.println("  Max: " + nonHeapMemoryUsage.getMax() / (1024 * 1024) + " MB");

获取操作系统的总内存和可用内存

如果需要获取操作系统的总内存和可用内存(非 JVM 内存),可以通过 com.sun.management.OperatingSystemMXBean 实现:

java如何过去内存

import com.sun.management.OperatingSystemMXBean;
import java.lang.management.ManagementFactory;

OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
long totalPhysicalMemory = osBean.getTotalPhysicalMemorySize(); // 系统总物理内存
long freePhysicalMemory = osBean.getFreePhysicalMemorySize();   // 系统空闲物理内存

System.out.println("Total Physical Memory: " + totalPhysicalMemory / (1024 * 1024) + " MB");
System.out.println("Free Physical Memory: " + freePhysicalMemory / (1024 * 1024) + " MB");

使用第三方库获取内存信息

如果需要更详细的内存分析,可以使用第三方库如 oshi 获取系统级内存信息:

<!-- Maven 依赖 -->
<dependency>
    <groupId>com.github.oshi</groupId>
    <artifactId>oshi-core</artifactId>
    <version>6.1.6</version>
</dependency>

示例代码:

import oshi.SystemInfo;
import oshi.hardware.GlobalMemory;

SystemInfo systemInfo = new SystemInfo();
GlobalMemory memory = systemInfo.getHardware().getMemory();

long totalMemory = memory.getTotal();       // 系统总内存
long availableMemory = memory.getAvailable(); // 系统可用内存

System.out.println("Total System Memory: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("Available System Memory: " + availableMemory / (1024 * 1024) + " MB");

注意事项

  • RuntimeManagementFactory 提供的是 JVM 内存信息,而 oshiOperatingSystemMXBean 提供的是操作系统级别的内存信息。
  • maxMemory 取决于 JVM 启动参数(如 -Xmx),如果没有设置,默认为系统可用内存的一部分。
  • 内存单位通常是字节,需要手动转换为 KB、MB 或 GB 以便阅读。

标签: 过去内存
分享给朋友:

相关文章

react如何释放所有内存

react如何释放所有内存

释放内存的方法 在React应用中,内存管理主要涉及组件卸载、事件监听清理、定时器清除以及全局状态释放。以下是几种有效的内存释放方法: 卸载组件时清理资源 使用useEffect钩子的清理函数来释放…

java如何释放内存

java如何释放内存

Java内存管理机制 Java采用自动内存管理机制,主要依赖垃圾回收器(Garbage Collector, GC)来释放不再使用的对象内存。开发者无需手动释放内存,但可通过合理编码优化内存使用。…

java 如何避免内存溢出

java 如何避免内存溢出

内存溢出的常见原因 Java 内存溢出(OutOfMemoryError)通常由以下原因导致: 堆内存不足:对象过多或单个对象过大,超出 JVM 堆内存限制。 方法区/元空间溢出:加载过多类…

如何查看java内存

如何查看java内存

查看 Java 内存的方法 使用命令行工具 通过 jstat 命令可以监控 JVM 堆内存使用情况: jstat -gc <pid> <interval> <cou…

如何监控java内存

如何监控java内存

监控Java内存的方法 使用JVM内置工具 Java虚拟机(JVM)提供了多种内置工具来监控内存使用情况。jstat命令可以实时查看堆内存、垃圾回收等统计信息。例如: jstat -gc <p…

react如何过去id

react如何过去id

获取元素ID的方法 在React中获取DOM元素的ID可以通过多种方式实现,具体取决于使用场景和组件类型。 使用ref获取元素 import { useRef } from 'react'…