当前位置:首页 > Java

java如何过去内存

2026-03-23 13:09:16Java

Java 获取内存信息的方法

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

使用 Runtime 类获取内存信息

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

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 实现:

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>

示例代码:

java如何过去内存

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 以便阅读。

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

相关文章

java 如何释放内存

java 如何释放内存

在 Java 中,内存管理主要由垃圾回收器(GC)自动处理,但开发者可以通过一些方式间接影响内存释放。以下是相关方法和注意事项: 手动触发垃圾回收 虽然不推荐频繁调用,但可以通过 System.gc…

java 如何释放内存

java 如何释放内存

手动触发垃圾回收 调用 System.gc() 或 Runtime.getRuntime().gc() 可以建议 JVM 执行垃圾回收。但垃圾回收的实际执行时间和效果由 JVM 决定,不保证立即释放内…

java如何释放内存

java如何释放内存

内存管理基础 Java采用自动垃圾回收(Garbage Collection, GC)机制管理内存,开发者无需手动释放对象占用的内存。但通过合理编码可优化内存使用,减少内存泄漏风险。 促进垃圾回…

java如何解决内存

java如何解决内存

内存管理基础 Java内存管理依赖垃圾回收器(GC)自动回收无用对象,但仍需开发者注意内存泄漏和优化。关键点包括堆内存划分(新生代、老年代)、GC算法(如标记-清除、G1)及监控工具(如VisualV…

如何修改java内存

如何修改java内存

修改Java应用内存的方法 设置JVM堆内存参数 通过JVM启动参数调整堆内存大小,常用参数如下: -Xms<size>:设置初始堆大小(如 -Xms512m 表示初始堆为512MB…

react如何释放所有内存

react如何释放所有内存

在React应用中释放内存通常涉及优化组件生命周期、状态管理和外部资源清理。以下是几种有效的方法: 清理副作用 使用useEffect钩子时,确保返回一个清理函数以释放资源。例如定时器、事件监听器或…