java获取jvm内存信息 java获取jvm运行信息 java获取jvm运行信息

  • 1、创建需要使用的工具类
  • 2、创建一个 jvm信息对象类
  • 3、使用

1、创建需要使用的工具类

文件名 ByteConverter.java 用于将字节数值转为 MB数值

import java.math.BigDecimal;import java.math.RoundingMode;/** * 

字节数值转换

*

* *

* * @author 作者 * @since 2023年01月12日 下午4:14:02 **/
public class ByteConverter {/** * 将字节数量转换为MB * * @param bytes 字节数量 * @return 对应的MB */public static BigDecimal bytesToMB(double bytes) {BigDecimal bytesConver = BigDecimal.valueOf(bytes);// 字节数量转换MB = 字节数 / (1024 * 1024)BigDecimal conditions = BigDecimal.valueOf(1048576L);return bytesConver.divide(conditions, 2, RoundingMode.HALF_UP);}}

2、创建一个 jvm信息对象类

import cn.hutool.core.date.DateUtil;import cn.hutool.core.lang.Singleton;import java.lang.management.ManagementFactory;import java.lang.management.RuntimeMXBean;import java.math.BigDecimal;import java.math.RoundingMode;import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;/** * 

JVM运行信息

*

* *

* * @author 作者 * @since 2023年01月12日 下午4:14:02 **/
public class JvmInfo {/** * 单例模式,使用 hutool工具,也可以自己实现,也可以直接不用单例模式 直接new */private static JvmInfo info = Singleton.get(JvmInfo.class);/** * JVM已用内存 */private BigDecimal usedMemory;/** * JVM最大可用内存 */private BigDecimal maxMemory;/** * JVM剩余内存 */private BigDecimal freeMemory;/** * jdk安装路径 */private String jdkHome;/** * jdk版本 */private String jdkVersion;/** * jdk名称 */private String jdkName;/** * 程序启动时间 */private String startTime;/** * 已运行时间 */private String elapsedTime;/** * 运行参数 */private String runParamters;/** * JVM内存使用率 */private BigDecimal usage;private JvmInfo(){}public static JvmInfo getInstans() {Runtime runtime = Runtime.getRuntime();RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();// jvm已使用内存info.setUsedMemory(ByteConverter.bytesToMB(runtime.totalMemory() - runtime.freeMemory()));// jvm最大可用内存info.setMaxMemory(ByteConverter.bytesToMB(Runtime.getRuntime().maxMemory()));// jvm剩余内存info.setFreeMemory(ByteConverter.bytesToMB(Runtime.getRuntime().freeMemory()));// jvm内存使用率info.setUsage(info.getUsedMemory().divide(info.getMaxMemory(), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));// jdk版本info.setJdkVersion(System.getProperty("java.version"));// jdk安装路径info.setJdkHome(System.getProperty("java.home"));// jdk名称info.setJdkName(runtimeMXBean.getVmName());// 程序运行时间Instant instant = Instant.ofEpochMilli(runtimeMXBean.getStartTime());info.setStartTime(LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toString().replace("T", " "));// 程序已运行时间info.setElapsedTime(getDatePoor(System.currentTimeMillis(), runtimeMXBean.getStartTime()));return info;}/** * 获取两个时间的差值(用于计算JVM运行时间) * * @param currentTime 大的那个时间 * @param startTime 小的那个时间 * @return 返回差的时间字符 */private static String getDatePoor( long currentTime, long startTime) {// 获得两个时间的毫秒时间差异long diff = currentTime - startTime;// 输出结果, 使用 hutool工具,不使用huttol 请使用方式实现计算 两个时间相差值return DateUtil.formatBetween(diff);}public String getJdkName() {return jdkName;}public void setJdkName(String jdkName) {this.jdkName = jdkName;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getElapsedTime() {return elapsedTime;}public void setElapsedTime(String elapsedTime) {this.elapsedTime = elapsedTime;}public String getRunParamters() {return runParamters;}public void setRunParamters(String runParamters) {this.runParamters = runParamters;}public String getJdkVersion() {return jdkVersion;}public void setJdkVersion(String jdkVersion) {this.jdkVersion = jdkVersion;}public BigDecimal getUsage() {return usage;}public void setUsage(BigDecimal usage) {this.usage = usage;}public BigDecimal getUsedMemory() {return usedMemory;}public void setUsedMemory(BigDecimal usedMemory) {this.usedMemory = usedMemory;}public BigDecimal getMaxMemory() {return maxMemory;}public void setMaxMemory(BigDecimal maxMemory) {this.maxMemory = maxMemory;}public BigDecimal getFreeMemory() {return freeMemory;}public void setFreeMemory(BigDecimal freeMemory) {this.freeMemory = freeMemory;}public String getJdkHome() {return jdkHome;}public void setJdkHome(String jdkHome) {this.jdkHome = jdkHome;}}

3、使用

public static void main(String[] args) {System.out.printf("JVM运行信息:%s", JvmInfo.getInstans());}