Java 获取JVM内存和物理内存信息

9/6/2015来源:Java教程人气:2335

java 获取JVM内存和物理内存信息
 1 package com.sysinfo; 2 public class MonitorInfo { 3     /** jvm可使用内存. */ 4     PRivate long totalMemory; 5      6     /** jvm剩余内存. */ 7     private long freeMemory; 8      9     /** jvm最大可使用内存. */10     private long maxMemory;11     12     /** 操作系统. */13     private String osName;14     15     /** 总的物理内存. */16     private long totalMemorySize;17     18     /** 剩余的物理内存. */19     private long freeMemorySize;20     21     /** 已使用的物理内存. */22     private long usedMemorySize;23     24     /** 核心数. */25     private int processors;26 27     public long getTotalMemory() {28         return totalMemory;29     }30 31     public void setTotalMemory(long totalMemory) {32         this.totalMemory = totalMemory;33     }34 35     public long getFreeMemory() {36         return freeMemory;37     }38 39     public void setFreeMemory(long freeMemory) {40         this.freeMemory = freeMemory;41     }42 43     public long getMaxMemory() {44         return maxMemory;45     }46 47     public void setMaxMemory(long maxMemory) {48         this.maxMemory = maxMemory;49     }50 51     public String getOsName() {52         return osName;53     }54 55     public void setOsName(String osName) {56         this.osName = osName;57     }58 59     public long getTotalMemorySize() {60         return totalMemorySize;61     }62 63     public void setTotalMemorySize(long totalMemorySize) {64         this.totalMemorySize = totalMemorySize;65     }66 67     public long getFreeMemorySize() {68         return freeMemorySize;69     }70 71     public void setFreeMemorySize(long freeMemorySize) {72         this.freeMemorySize = freeMemorySize;73     }74 75     public long getUsedMemorySize() {76         return usedMemorySize;77     }78 79     public void setUsedMemorySize(long usedMemorySize) {80         this.usedMemorySize = usedMemorySize;81     }82 83     public int getProcessors() {84         return processors;85     }86 87     public void setProcessors(int processors) {88         this.processors = processors;89     }90 }
 1 package com.sysinfo; 2  3 import java.lang.management.ManagementFactory; 4 import java.math.BigDecimal; 5  6 import com.sun.management.OperatingSystemMXBean; 7  8 public class MonitorService { 9     public MonitorInfo getMonitorInfoBean() throws Exception {10         double mb = 1024 * 1024 * 1.0;11         double gb = 1024 * 1024 * 1024 * 1.0;12 13         // jvm14         double totalMemory = Runtime.getRuntime().totalMemory() / mb;15         double freeMemory = Runtime.getRuntime().freeMemory() / mb;16         double maxMemory = Runtime.getRuntime().maxMemory() / mb;17         // os18         OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory19                 .getOperatingSystemMXBean();20         String osName = System.getProperty("os.name");21         double totalMemorySize = osmxb.getTotalPhysicalMemorySize() / gb;22         double freeMemorySize = osmxb.getFreePhysicalMemorySize() / gb;23         double usedMemorySize = (osmxb.getTotalPhysicalMemorySize() - osmxb24                 .getFreePhysicalMemorySize()) / gb;25         // MonitorInfo26         MonitorInfo infoBean = new MonitorInfo();27         infoBean.setTotalMemory(getIntValue(totalMemory));28         infoBean.setFreeMemory(getIntValue(freeMemory));29         infoBean.setMaxMemory(getIntValue(maxMemory));30         infoBean.setOsName(osName);31         infoBean.setTotalMemorySize(getIntValue(totalMemorySize));32         infoBean.setFreeMemorySize(getIntValue(freeMemorySize));33         infoBean.setUsedMemorySize(getIntValue(usedMemorySize));34         infoBean.setProcessors(Runtime.getRuntime().availableProcessors());35         return infoBean;36     }37 38     /**39      * 四舍五入取整40      * 41      * @param d42      * @return43      */44     private static int getIntValue(double d) {45         return new BigDecimal(d).setScale(0, BigDecimal.ROUND_HALF_UP)46                 .intValue();47     }48 49     public static void main(String[] args) throws Exception {50         MonitorService service = new MonitorService();51         MonitorInfo monitorInfo = service.getMonitorInfoBean();52         // System.out.println("JVM可使用内存=" + monitorInfo.getTotalMemory() +53         // "MB");54         // System.out.println("JVM剩余内存=" + monitorInfo.getFreeMemory() + "MB");55         // System.out.println("JVM最大可使用内存=" + monitorInfo.getMaxMemory() +56         // "MB");57 58         System.out.println("操作系统=" + monitorInfo.getOsName());59         System.out.println("核心数=" + monitorInfo.getProcessors());60         System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "GB");61         System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemorySize() + "GB");62         System.out63                 .println("已使用的物理内存=" + monitorInfo.getUsedMemorySize() + "GB");64     }65 }