性能指标与测量

Java 代码优化

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

超越时间测量

  • 前面的视频
    • 测量操作耗时
    • JVM 内存管理
  • 超越时间测量
  • 内存指标
  • CPU 利用率指标
Java 代码优化

使用 Runtime 获取内存指标

// Get the Runtime instance
Runtime runtime = Runtime.getRuntime();


// Memory metrics in bytes long totalMemory = runtime.totalMemory(); // Memory currently allocated long freeMemory = runtime.freeMemory(); // Memory that is unused long maxMemory = runtime.maxMemory(); // Maximum memory JVM will attempt to use
  • 都返回以字节为单位的 long 数值
Java 代码优化

理解内存指标

  • maxMemory():JVM 试图使用的最大内存(由 -Xmx 设置)
  • totalMemory():JVM 当前已分配的内存
  • freeMemory():未使用的内存
  • usedMemory()totalMemory - freeMemory
  • JVM 可按需将 totalMemory 增长至 maxMemory
Java 代码优化

内存指标实战

// Create a utility method for readable memory values
public static double getUsedMemoryMB() {
    Runtime runtime = Runtime.getRuntime();
    long memory = runtime.totalMemory() - runtime.freeMemory();
    return memory / (1024.0 * 1024.0);  // Convert to MB
}

// After allocation
System.out.println("Memory used: " + getUsedMemoryMB() + " MB");
Memory used: 5.23 MB
Java 代码优化

CPU 利用率测量

import java.lang.management.*;

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

// Check if CPU time measurement is supported if (threadMXBean.isThreadCpuTimeSupported()) { // Enable CPU time measurement threadMXBean.setThreadCpuTimeEnabled(true); // Get CPU time in nanoseconds long cpuTimeNs = threadMXBean.getThreadCpuTime(Thread.currentThread().threadId()); }
Java 代码优化

Java 分析工具

  • JVisualVM:用于监控内存、CPU 等的可视化界面
  • jmap:命令行内存分析工具
  • 这些工具超越了我们已讨论的简单指标!
Java 代码优化

Passons à la pratique !

Java 代码优化

Preparing Video For Download...