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

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

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

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

java 复制代码
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * <h2>字节数值转换</h2>
 * <p>
 *
 * </p>
 *
 * @author 作者<1922802352@qq.com>
 * @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信息对象类

java 复制代码
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;
/**
 * <h2>JVM运行信息</h2>
 * <p>
 *
 * </p>
 *
 * @author 作者<1922802352@qq.com>
 * @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、使用

java 复制代码
	public static void main(String[] args) {
		System.out.printf("JVM运行信息:%s", JvmInfo.getInstans());
	}
相关推荐
2301_780789664 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T4 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设4 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn5 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵5 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David6 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1006 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin6 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php