一、JAVA中获取JVM的信息

  原理,利用JavaSDK自带的ManagementFactory类来获取。

二、获取信息

1、获取进程ID

    @Test
public void test1() {
RuntimeMXBean mxb = ManagementFactory.getRuntimeMXBean();
System.out.println(mxb.getName()); //2668@Sindrol-PC
}

2、获取ManagementFactory.getRuntimeMXBean()的其它信息

RuntimeMXBean mxb = ManagementFactory.getRuntimeMXBean();
mxb.getSystemProperties() = {HashMap@866} size = 56
mxb.getInputArguments() = {Collections$UnmodifiableRandomAccessList@1039} size = 5
mxb.getBootClassPath() = "C:\Program Files\Java\jdk1.8.0_161\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_161\jre\classes;D:\Applicaton\DevTools\JetBrains\IntelliJIDEA\lib\rt\debugger-agent-storage.jar"
mxb.getLibraryPath() = "C:\Program Files\Java\jdk1.8.0_161\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Program Files\Docker\Docker\Resources\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64;D:\Applicaton\DevTools\Python\3.5\Scripts\;D:\Applicaton\DevTools\Python\3.5\;D:\Applicaton\DevTools\cudnn-8.0-windows10-x64-v5.1\cuda;D:\Applicaton\DevTools\cudnn-8.0-windows10-x64-v5.1\cuda\bin;D:\Applicaton\DevTools\cudnn-8.0-windows10-x64-v5.1\cuda\lib\x64;D:\Applicaton\DevTools\cudnn-8.0-windows10-x64-v5.1\cuda\lib;C:\Program Files (x86)\Common Files\NetSarang;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft SDKs\Azure\CL"
mxb.getClassPath() = "D:\Applicaton\DevTools\JetBrains\IntelliJIDEA\lib\idea_rt.jar;D:\Applicaton\DevTools\JetBrains\IntelliJIDEA\plugins\junit\lib\junit-rt.jar;D:\Applicaton\DevTools\JetBrains\IntelliJIDEA\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunpkcs11.jar;C:\Pr"
mxb.getManagementSpecVersion() = "1.2"
mxb.getSpecName() = "Java Virtual Machine Specification"
mxb.getSpecVendor() = "Oracle Corporation"
mxb.getStartTime() = 1527587462275
mxb.getUptime() = 95372
mxb.getVmVendor() = "Oracle Corporation"
mxb.getObjectName() = {ObjectName@1052} "java.lang:type=Runtime"
mxb.getName() = "2668@Sindrol-NTB"

3、获取操作系统信息

    @Test
public void test2() {
OperatingSystemMXBean osb = ManagementFactory.getOperatingSystemMXBean();
System.out.println(osb.getName()); //Windows 10
System.out.println(osb.getArch()); //amd 64
System.out.println(osb.getAvailableProcessors()); //4
System.out.println(osb.getVersion()); //10.0
System.out.println(osb.getSystemLoadAverage()); //-1.0 }

4、获取JVM的内存

    @Test
public void test4() {
MemoryMXBean mxb = ManagementFactory.getMemoryMXBean();
//Heap
System.out.println("Max:" + mxb.getHeapMemoryUsage().getMax() / 1024 / 1024 + "MB"); //Max:1776MB
System.out.println("Init:" + mxb.getHeapMemoryUsage().getInit() / 1024 / 1024 + "MB"); //Init:126MB
System.out.println("Committed:" + mxb.getHeapMemoryUsage().getCommitted() / 1024 / 1024 + "MB"); //Committed:121MB
System.out.println("Used:" + mxb.getHeapMemoryUsage().getUsed() / 1024 / 1024 + "MB"); //Used:7MB
System.out.println(mxb.getHeapMemoryUsage().toString()); //init = 132120576(129024K) used = 8076528(7887K) committed = 126877696(123904K) max = 1862270976(1818624K) //Non heap
System.out.println("Max:" + mxb.getNonHeapMemoryUsage().getMax() / 1024 / 1024 + "MB"); //Max:0MB
System.out.println("Init:" + mxb.getNonHeapMemoryUsage().getInit() / 1024 / 1024 + "MB"); //Init:2MB
System.out.println("Committed:" + mxb.getNonHeapMemoryUsage().getCommitted() / 1024 / 1024 + "MB"); //Committed:8MB
System.out.println("Used:" + mxb.getNonHeapMemoryUsage().getUsed() / 1024 / 1024 + "MB"); //Used:7MB
System.out.println(mxb.getNonHeapMemoryUsage().toString()); //init = 2555904(2496K) used = 7802056(7619K) committed = 9109504(8896K) max = -1(-1K)
}

5、获取JVM的内存池情况

    @Test
public void test5() {
List<MemoryPoolMXBean> mxb = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean memoryPoolMXBean : mxb) {
System.out.println("Name:" + memoryPoolMXBean.getName());
System.out.println("Usage:" + memoryPoolMXBean.getUsage());
System.out.println("Manager:" + String.join(",", memoryPoolMXBean.getMemoryManagerNames()));
System.out.println("Type:" + memoryPoolMXBean.getType());
System.out.println("--------------------------");
} }

结果:

Name:Code Cache
Usage:init = 2555904(2496K) used = 1742656(1701K) committed = 2555904(2496K) max = 251658240(245760K)
Manager:CodeCacheManager
Type:Non-heap memory
--------------------------
Name:Metaspace
Usage:init = 0(0K) used = 5436960(5309K) committed = 5767168(5632K) max = -1(-1K)
Manager:Metaspace Manager
Type:Non-heap memory
--------------------------
Name:Compressed Class Space
Usage:init = 0(0K) used = 632000(617K) committed = 786432(768K) max = 1073741824(1048576K)
Manager:Metaspace Manager
Type:Non-heap memory
--------------------------
Name:PS Eden Space
Usage:init = 33554432(32768K) used = 8076056(7886K) committed = 33554432(32768K) max = 687865856(671744K)
Manager:PS MarkSweep,PS Scavenge
Type:Heap memory
--------------------------
Name:PS Survivor Space
Usage:init = 5242880(5120K) used = 0(0K) committed = 5242880(5120K) max = 5242880(5120K)
Manager:PS MarkSweep,PS Scavenge
Type:Heap memory
--------------------------
Name:PS Old Gen
Usage:init = 88080384(86016K) used = 0(0K) committed = 88080384(86016K) max = 1396703232(1363968K)
Manager:PS MarkSweep
Type:Heap memory
--------------------------

6、获取程序线程信息

    @Test
public void test6() {
ThreadMXBean tmx = ManagementFactory.getThreadMXBean();
System.out.println("thread count:" + tmx.getThreadCount());
for (long id : tmx.getAllThreadIds()) {
ThreadInfo ti = tmx.getThreadInfo(id);
System.out.println(ti.toString().trim());
System.out.println("cpu time:" + tmx.getThreadCpuTime(id));
System.out.println("user time:" + tmx.getThreadUserTime(id));
System.out.println("-----------------");
}
System.out.println("findDeadlockedThreads:");
if (tmx.findDeadlockedThreads() != null)
for (long id : tmx.findDeadlockedThreads()) {
ThreadInfo ti = tmx.getThreadInfo(id);
System.out.println(ti.toString().trim());
}
}

结果:

thread count:6
"Monitor Ctrl-Break" Id=6 RUNNABLE (in native)
cpu time:0
user time:0
-----------------
"Attach Listener" Id=5 RUNNABLE
cpu time:0
user time:0
-----------------
"Signal Dispatcher" Id=4 RUNNABLE
cpu time:0
user time:0
-----------------
"Finalizer" Id=3 WAITING on java.lang.ref.ReferenceQueue$Lock@22927a81
cpu time:0
user time:0
-----------------
"Reference Handler" Id=2 WAITING on java.lang.ref.Reference$Lock@78e03bb5
cpu time:0
user time:0
-----------------
"main" Id=1 RUNNABLE
cpu time:203125000
user time:171875000
-----------------
findDeadlockedThreads:

JAVA代码中获取JVM信息的更多相关文章

  1. 在java代码中获取JVM参数(转)

    近日关注性能调优,关注JMX,发现java.lang.management.*之强大.同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考: MemoryMXBean memorymbean ...

  2. java代码中获取进程process id(转)

    另一方面,线程ID=进程ID+内部线程对象ID并不成立,    参考: blog.csdn.net/heyetina/article/details/6633901     如何在java代码中获取进 ...

  3. Java代码中获取Json的key值

    测试json字符串: {"access_token":"hkbQl5o_l67dZ7_vJRATKBwTLk9Yj5QyMuOJThAr8Baj0xWf4wxW1p4ym ...

  4. Java代码中获取配置文件(config.properties)中内容的两种方法

    方法千千万,本人暂时只总结了两种方法. (1)config.properties中的内容如图 在applicationContext.xml中配置 <!-- 引入配置文件 --> < ...

  5. java代码中获取classpath路径

    Javaweb工程中,有时候需要自己手动的去读取classpath下面的配置文件,这里总结一点读取classpath路径的方法,分享一下. 方法一: String path = Test.class. ...

  6. Android开发之java代码中获取当前系统的时间工具类

    /** * 获取当前时间 * * @return */ public String getTime() { Date date = new Date();// 创建一个时间对象,获取到当前的时间 Si ...

  7. 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件

    代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...

  8. java如何从一段html代码中获取图片的src路径

    java如何从一段html代码中获取图片的src路径 package com.cellstrain.icell.Test; import java.util.ArrayList;import java ...

  9. C#中获取文件信息的代码

    如下的内容内容是关于C#中获取文件信息的内容,应该对大伙有一些好处. FileInfo fi = new FileInfo(@"C:file.txt"); if(fi.Exists ...

随机推荐

  1. Number对象的常用属性和方法

    方法 描述 isNan() 检查值是否为数字 toFied() 将特定数字四舍五入至小数位数(返回一个字符串) toPrecision() 按数字的位数四舍五入(返回一个字符串) toExponent ...

  2. SqlServer基础语句练习(一)

    学了不少东西,感觉自己的sql语句还是很不好,从基础学起吧. 来一段sql脚本: create database tongji go use tongji go create table studen ...

  3. 浅析微信支付:公众平台卡券功能开通、HTML5线上发券(JS-SDK接口)、查看卡券详情

    本文是[浅析微信支付]系列文章的第十六篇,主要讲解如何使用微信公众平台的卡券功能.如何使用HTML5在网页展示用户领券以及微信卡券和商户平台代金券的关系. 浅析微信支付系列已经更新十六篇了哟-,没有看 ...

  4. Struts2的动态Action和全局跳转视图以及配置各项默认值

    1:Struts2的默认访问后缀是.action(特别需要注意的是改了配置文件web.xml或者struts.xml需要重启服务器) 2:Struts2中常用的常量介绍:<!-- 一:全局配置 ...

  5. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...

  6. 037 关于pom.xml的一些问题的理解

    最近在pom上出了一些问题,搞了一天才理解了一些问题,记录一下. 当在覆盖本地repository包之后,pom.xml上面出现了一个x. 当mvn->update project之后,还是有许 ...

  7. Eclipse添加git插件上传项目到github

    前提: 在Github已经注册成功自己的账号 新建一个仓库 创建成功后记住url: 首先像安装Pydev一样 点击help的Install New Software 点击Add后添加链接http:// ...

  8. python模块中sys.argv[]使用

    一.sys 模块 sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口. 官方的文档参考:https://docs.python.org/ ...

  9. html+css基础知识

    这是自己学习html时候做的一些记录,供大家参考 <!-- 块和内联 块元素:独占一行的元素 div p h ul div没有任何语义,就是一个纯粹的快元素 就是为了方便布局 span是内联元素 ...

  10. BZOJ.2437.[NOI2011]兔兔与蛋蛋游戏(二分图博弈 匈牙利)

    题目链接 首先空格的移动等价于棋子在黑白格交替移动(设起点移向白格就是黑色),且不会走到到起点距离为奇数的黑格.到起点距离为偶数的白格(删掉就行了),且不会重复走一个格子. (然后策略就同上题了,只不 ...