一、获取JVM内存空间

系统环境:WIN

JDK版本:1.8re

直接调用Runtime中相应的方法即可:

public long maxMemory()
 
Returns the maximum amount of memory that the Java virtual machine will attempt to use. 
If there is no inherent limit then the value Long.MAX_VALUE will be returned.
 
Returns:
    the maximum amount of memory that the virtual machine will attempt to use, measured in bytes
Since:
    1.4 
        以上为Java8的API,maxMemory( ) 返回Java虚拟机当前状态能使用的最大内存大小。如果没有参数限制,将会返回Long.MAX_VALUE这个值。敲黑板!Long.MAX_VALUE这个值是什么呢,这个Long.MAX_VALUE是JVM能够在系统中可以扩展到的最大的内存大小。

public long totalMemory()
 
Returns the total amount of memory in the Java virtual machine. 
The value returned by this method may vary over time, depending on the host environment.
 
Note that the amount of memory required to hold an object of any given type may be implementation-dependent.
 
Returns:
    the total amount of memory currently available for current and future objects, measured in bytes. 
        totalMemory( ) 返回Java虚拟机中的总内存。这个方法返回的值可能随时间而变化,这取决于宿主操作系统环境和JVM的内存占用情况。 需要注意的是, Note that the amount of memory required to hold an object of any given type may be implementation-dependent 。不同依赖实现的虚拟机需要的能Hold住任何类型对象所需的内存大小都不太一样。因为这取决于对象在JVM运行时是如何建立在内存中的,不同的虚拟机实现都不太一样,拿最常用的HotSpot来说,一个对象包括:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding),而且在JAVA中需要检测对象占用的内存大小,不像C中那么简单sizeof( ) 就完事了。

public long freeMemory()
 
Returns the amount of free memory in the Java Virtual Machine. 
Calling the gc method may result in increasing the value returned by freeMemory.
 
Returns:
    an approximation to the total amount of memory currently available for future allocated objects, measured in bytes. 
        freeMemory( ) 返回Java虚拟机中空闲内存的数量。这个空闲是相对于totalMemory来说的而不是maxMemory,调用GC方法可能会增大freeMemory的返回值。

二、获取操作系统内存空间

依靠sun.management.ManagementFactoryHelper,不多说,看代码。

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
 
/**
 * JAVA获取JVM内存空间和物理内存空间
 * @author jiangyuqin
 *
 */
public class MonitorInfoTest {
 
    public static void main(String[] args) {
 
        // 虚拟机级内存情况查询
        long vmFree = 0;
        long vmUse = 0;
        long vmTotal = 0;
        long vmMax = 0;
        int byteToMb = 1024 * 1024;
        Runtime rt = Runtime.getRuntime();
        vmTotal = rt.totalMemory() / byteToMb;
        vmFree = rt.freeMemory() / byteToMb;
        vmMax = rt.maxMemory() / byteToMb;
        vmUse = vmTotal - vmFree;
        System.out.println("JVM内存已用的空间为:" + vmUse + " MB");
        System.out.println("JVM内存的空闲空间为:" + vmFree + " MB");
        System.out.println("JVM总内存空间为:" + vmTotal + " MB");
        System.out.println("JVM总内存空间为:" + vmMax + " MB");
 
        System.out.println("======================================");
        // 操作系统级内存情况查询
        OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
        String os = System.getProperty("os.name");
        long physicalFree = osmxb.getFreePhysicalMemorySize() / byteToMb;
        long physicalTotal = osmxb.getTotalPhysicalMemorySize() / byteToMb;
        long physicalUse = physicalTotal - physicalFree;
        System.out.println("操作系统的版本:" + os);
        System.out.println("操作系统物理内存已用的空间为:" + physicalFree + " MB");
        System.out.println("操作系统物理内存的空闲空间为:" + physicalUse + " MB");
        System.out.println("操作系统总物理内存:" + physicalTotal + " MB");
        
        // 获得线程总数
        ThreadGroup parentThread;
        int totalThread = 0;
        for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
                .getParent() != null; parentThread = parentThread.getParent()) {
            totalThread = parentThread.activeCount();
        }
        System.out.println("获得线程总数:" + totalThread);
    }
}
运行时加上参数:-Xms512m -Xmx1024m

JAVA获取JVM内存空间和物理内存空间相关推荐

  1. 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间

    动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...

  2. 形式参数内存在哪java_深入浅出Java中JVM内存管理

    原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...

  3. java查看jvm内存使用情况

    java查看jvm内存使用情况 (2012-03-22 15:50:54) 标签: jvm 内存 虚拟机 分配 it java.lang.Runtime类提供了查看当前JVM内存的使用情况.每个jav ...

  4. Java获取任务管理器内存、各磁盘内存、CPU使用率数据

    文章目录 1.获取任务管理器运行内存.各磁盘内存 2.获取CPU使用率 1.获取任务管理器运行内存.各磁盘内存 1.代码实现: /*** 获取内存使用情况*/public static void ge ...

  5. 深入浅出 Java 中 JVM 内存管理

    Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗? 可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义  |  有哪些GC算法  以及年轻代和老年代各自特点等 ...

  6. java中JVM内存管理(1)

    Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?  可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义  |  有哪些GC算法  以及年轻代和老年代各自特点 ...

  7. 【Java】JVM内存回收

    SafePoint检查 Safepoint 可以理解成是在代码执行过程中的一些特殊位置,当线程执行到这些位置的时候,线程可以暂停.在 SafePoint 保存了其他位置没有的一些当前线程的运行信息,供 ...

  8. Java进阶 JVM 内存与垃圾回收篇(一)

    JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...

  9. 深入理解Java虚拟机--JVM内存模型

    目录 一.运行时数据区域 1.程序计数器 2.Java 虚拟机栈 3.本地方法栈 4.Java 堆 5.方法区 6.运行时常量池 7.直接内存 二.OutOfMemoryError异常 1.Java堆 ...

最新文章

  1. __init__在python中的用法知乎_python使用selenium爬虫知乎的方法示例
  2. python脚本在命令行中传递参数(附字符查找小案例)
  3. 趣味SQL——创建指定的数据类型
  4. BZOJ 3514 Codechef MARCH14 GERALD07加强版
  5. sklear多项式回归
  6. smarty中英文多编码字符截取乱码问题
  7. html字段值换行代码怎么写,HTML段落,换行,字符实体
  8. 57.should merge Js
  9. [QT][待解决问题]对话框ui载入卡顿问题
  10. UE4 蓝图教程(一) 开始,一个转动的香蕉
  11. FSMC实现8080时序驱动SSD1963(LCD驱动芯片)--原理->编码
  12. Linux基础教程: 4、用户组和用户的创建
  13. Java版本kafka-clients的介绍
  14. 代理是什么?(HTTP代理,SOCKS代理)
  15. 获取视频fps、总帧数
  16. 自由曲面光学元件的OAM测量
  17. WS2812B灯带驱动实验
  18. 微信H5接口怎么申请
  19. 浏览器修改默认主页(360,chrome...)
  20. 【调剂】齐齐哈尔大学通信与电子工程学院石翠萍老师欢迎2020级硕士研究生调剂...

热门文章

  1. Win32ASM-进程学习【1】
  2. c++ 基本排序算法学习
  3. linux下g++和gcc_Linux中gcc和g ++有什么区别?
  4. Java LinkedList对象的get(int index)方法与示例
  5. 实验4 数据查询--简单查询
  6. mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...
  7. golang调用matlab,Golang中Proto编写和生成
  8. c++实现字符串类的封装
  9. Linux网络编程——tcp并发服务器(poll实现)
  10. C++ template —— 动多态与静多态(六)