`

JAVA虚拟内存的查看

    博客分类:
  • Java
JVM 
阅读更多
java.lang.Runtime类提供了查看当前JVM内存的使用情况。每个java实例(即虚拟机实例)只有一个Runtime的实例,通过Runtime.getRuntime()可以得到当前虚拟机中的Runtime实例对象。

Runtime提供3个方法可以获取当前JVM最大可以使用内存、当前JVM已拥有最大内存和剩余未使用内存。这3个内存指的都是JVM堆内存。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();



首先在JAVA的启动参数中加入指定-Xmx100m,设置JVM堆最大可以使用100m的内存。

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大内存 = " + max);
System.out.println("已分配内存 = " + total);
System.out.println("已分配内存中的剩余空间 = " + free);
System.out.println("最大可用内存 = " + usable);



上面代码的输出结果如下(这些内存大小与运行环境相关)

最大内存 = 104071168
已分配内存 = 5177344
已分配内存中的剩余空间 = 4937280
最大可用内存 = 103831104



最大内存(maxMemory)是通过启动JAVA虚拟机时使用参数-Xmx100m指定的,而输出也确实是100m。这表示JVM的堆内存最大可以使用104071168字节。

已分配内存(totalMemory)jvm使用的内存都是从本地系统获取的,但是通常jvm刚启动的时候,并不会向系统申请全部的内存。而是根据所加载的Class和相关资源的容量来决定的。在本例中,由于只在一个main()主方法中执行了上面的几行简单的代码。所以JVM只申请了5177344字节的内存。

已分配内存中的剩余空间(freeMemory) 这是相对以分配内存(totalMemeory)计算的,相当于totalMemory - 已使用内存。当freeMemory 快要接近0时,以分配的内存即将耗尽,JVM会决定再次向系统申请更多的内存。

最大可用内存 (usable)这是JVM真正还可以再继续使用的内存(不考虑之后垃圾回收再次得到的内存)。由【最大内存 - 已分配内存 + 已分配内存中的剩余空间】计算得到。
分享到:
评论

相关推荐

    Java虚拟内存研究

    ### Java虚拟内存研究 #### 内存溢出的分析与解决方法 在现代软件开发中,尤其是使用Java语言开发的企业级应用中,内存管理和优化是一个非常关键的技术领域。内存溢出(Out Of Memory, OOM)是导致Java应用程序...

    用JAVA做的虚拟内存管理.rar,JDK是6.2

    Java虚拟机(JVM)是Java程序运行的基础,它为应用程序提供了一个抽象的硬件平台,包括内存管理和垃圾回收等核心功能。在这个项目中,我们关注的是JVM如何进行虚拟内存管理,特别是在JDK 6.2版本中的实现。虚拟内存...

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    "java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码" 在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过...

    Java虚拟内存调优参数说明

    本文档详细介绍了怎么样调java虚拟内存

    java虚拟内存和缓冲流

    虚拟内存和缓冲流,直接粘贴到eclipse或者cmd运行即可

    java实现的内存分配

    在Java中,虽然JVM并不直接支持轮转法进行内存分配,但可以通过模拟实现。例如,我们可以创建一个固定大小的内存池,然后按照预定义的顺序分配和回收内存块。当一个请求到来时,分配下一个可用的内存块,一旦所有块...

    Java内存机制学习和使用

    **操作系统和虚拟内存**:现代操作系统通过虚拟内存技术实现了多个进程间的内存共享,每个进程拥有自己独立的虚拟地址空间。操作系统会根据需要在物理内存与交换空间之间动态迁移数据,以优化物理内存的使用效率。 ...

    JAVA内存溢出问题总结

    JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决...

    java虚拟内存.pdf

    由于给定文件【标题】和【描述】都是"java虚拟内存.pdf",而【标签】为"技术及资料",因此可以理解文件内容主题是关于Java虚拟机(JVM)及其虚拟内存管理的详细知识。以下是从【部分内容】中提取的知识点,以及相关...

    操作系统虚拟内存页面置换算法java版.pdf

    操作系统虚拟内存页面置换算法java版 本资源摘要信息旨在帮助读者更好地理解操作系统虚拟内存页面置换算法的实现方法,特别是基于Java语言的实现。该资源包括实验目的、试验内容、程序要求、需求分析、测试结果和...

    Java 8 内存模型.pdf

    在详细介绍Java 8内存模型之前,需要了解的是,JVM(Java虚拟机)在启动时,操作系统会为JVM进程分配一系列内存区域,这些内存区域包括堆(Heap)、元空间(MetaSpace)、线程堆栈(Thread Stack)、共享库(Shared ...

    操作系统课程设计-用java模拟首次适应和最佳适应内存分配

    Java的内存管理主要由垃圾收集器(Garbage Collector, GC)负责,它自动回收不再使用的对象所占用的内存。不过,对于课程设计中的模拟内存分配,我们需要创建自己的数据结构来表示内存块,并实现分配和回收的逻辑。 ...

    java内存管理精彩概述

    - **本地内存溢出**:操作系统管理的虚拟内存不足时。 9. **内存泄漏** 内存泄漏是指对象不再使用但仍然保持引用,导致无法被GC回收。常见的内存泄漏类型有永久代内存泄漏(如过多的类加载)和本机内存泄漏(C/...

    Java内存分配浅析

    Java内存分配是Java编程中非常重要的概念,它涉及到程序运行时的数据存储和管理。Java程序在JVM(Java Virtual Machine,Java虚拟机)上运行,JVM作为一个平台无关的执行环境,负责Java程序的内存管理和执行。理解...

    Java内存分配全面解析

    Java内存分配全面解析 Java程序在执行过程中,其内存分配主要涉及到JVM(Java Virtual Machine,Java虚拟机)的不同区域。这些区域包括寄存器、栈、堆、常量池、代码段和数据段。理解这些内存区域的工作原理对于...

    操作系统虚拟内存页面置换算法java版定义.pdf

    操作系统中的虚拟内存管理是至关重要的,它涉及到如何有效地在有限的物理内存中处理大量的虚拟内存需求。本实验主要关注虚拟内存中的页面置换算法,这是解决内存不足问题的关键策略。页面置换算法有多种,包括先进先...

    JVM-Java内存规范.png

    Java-JVM内存规范(详细完整思维导图),包含物理内存与虚拟内存、内核空间与用户空间、java中需要使用的内存组件、jvm内存结构、jvm内存回收策略、JVM参数等...

    用java取得linux系统cpu、内存的实时信息

    在IT领域,特别是对于系统监控和资源管理而言,掌握如何使用Java获取Linux系统的CPU和内存实时信息是一项重要的技能。这不仅有助于系统管理员实时监控服务器的健康状况,还为开发人员提供了优化应用程序性能的关键...

Global site tag (gtag.js) - Google Analytics