如何查看当前堆的大小

  1. package com.oyb.jvm.test03.lesson04;
  2. import com.sun.management.OperatingSystemMXBean;
  3. import java.lang.management.ManagementFactory;
  4. public class TestB01 {
  5. public static void main(String[] args) {
  6. int byteToMb = 1024 * 1024;
  7. long totalMemory=Runtime.getRuntime().totalMemory()/byteToMb;
  8. long maxMemory=Runtime.getRuntime().maxMemory()/byteToMb;
  9. System.out.println("当前初始内存大小 -Xms :"+totalMemory+"M");
  10. System.out.println("当前最大内存大小 -Xmx :"+maxMemory+"M");
  11. // 操作系统级内存情况查询
  12. OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
  13. long physicalFree = osmxb.getFreePhysicalMemorySize() / byteToMb;
  14. long physicalTotal = osmxb.getTotalPhysicalMemorySize() / byteToMb;
  15. long physicalUse = physicalTotal - physicalFree;
  16. System.out.println("操作系统物理内存已用的空间为:" + physicalFree + " MB");
  17. System.out.println("操作系统物理内存的空闲空间为:" + physicalUse + " MB");
  18. System.out.println("操作系统总物理内存:" + physicalTotal + " MB");
  19. System.out.println("默认堆 初始内存大小:物理电脑内存大小 / 64= "+physicalTotal/64+"M");
  20. System.out.println("默认堆 最大内存大小:物理电脑内存大小 / 4= "+physicalTotal/4+"M");
  21. try {
  22. Thread.sleep(100000000);
  23. } catch (InterruptedException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }

image.png

通过参数自定义堆内存大小

堆的大小在jvm启动时就已经设定好了,可以通过”-Xmx”和”-Xms”来进行设置
-X 是jvm的运行参数
“-Xms”用于表示堆区的起始内存,ms是memory start
“-Xmx”用于表示堆区的最大内存,
手动设置:-Xms512m -Xmx512m
image.png
image.png