`
- 浏览:
280044 次
- 性别:
- 来自:
西安
-
Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对freeMemory()这 个方法的意义应该有一些误解,他们认为这个方法返回的是操作系统的剩余可用内存,其实根本就不是这样的。这三个方法反映的都是java这个进程的内存情 况,跟操作系统的内存根本没有关系。下面结合totalMemory(),maxMemory()一起来解释。
maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程 序的时 候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下能 从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp ClassPath -Xmx512m ClassName,那么最大内存就是512*1024*0124字节。
totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的 所有 内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直 挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖- Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。
freeMemory()是什么呢,刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的 从操 作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是 freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程 序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可 能会有些大。
把下面的源代码编译以后,在class文件所在的目录里面,分别用java -cp . Untitled1 和java -cp . -Xms80m -Xmx80m Untitled1 运行,看看结果如何,有助于理解上面的阐述。
- public class Untitled1 {
- public Untitled1() {}
- public static void main(String[] args) {
- System.out.println(Runtime.getRuntime().freeMemory());
- System.out.println(Runtime.getRuntime().totalMemory());
- System.out.println(Runtime.getRuntime().maxMemory());
- long t = System.currentTimeMillis();
- try {
- Thread.sleep(30000);
- } catch (Exception ee) {
- ee.printStackTrace();
- }
- String[] aaa = new String[2000000];
- System.out.println(Runtime.getRuntime().freeMemory());
- System.out.println(Runtime.getRuntime().totalMemory());
- System.out.println(Runtime.getRuntime().maxMemory());
- try {
- Thread.sleep(30000);
- } catch (Exception ee) {
- ee.printStackTrace();
- }
- for (int i = 0; i < 2000000; i++) {
- aaa[i] = new String("aaa");
- }
- System.out.println(Runtime.getRuntime().freeMemory());
- System.out.println(Runtime.getRuntime().totalMemory());
- System.out.println(Runtime.getRuntime().maxMemory());
- try {
- Thread.sleep(30000);
- } catch (Exception ee) {
- ee.printStackTrace();
- }
- }
- }
转自: http://sitemasterkit.com/archives/133
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
获取内存信息相对简单,可以直接通过`Runtime.getRuntime()`获取到`Runtime`实例,然后调用其`totalMemory()`, `freeMemory()`, 和`maxMemory()`方法来获取Java堆内存的相关数据。对于物理内存的信息,可能需要使用...
`Runtime`类是Java标准库中的一个重要组成部分,它提供了应用程序与运行环境之间交互的能力。由于Java程序本身是跨平台的,`Runtime`类的存在使得Java程序可以访问底层操作系统的一些特性,例如执行外部进程、查询...
在 MonitorInfoBean 类中,使用 Runtime 类的 getRuntime() 方法来获取当前的 Runtime 对象,然后使用 Runtime 对象的 availableProcessors() 方法来获取 cpu 的数量,使用 totalMemory() 方法来获取总的物理内存,...
该方法返回一个Runtime对象,该对象提供了一些方法来获取系统的内存信息,例如maxMemory()、totalMemory()、freeMemory()等。 maxMemory()方法:返回当前系统的最大可用内存大小。 totalMemory()方法:返回当前...
`Runtime.getRuntime().freeMemory()` 和 `totalMemory()` 可以分别获取 Java 虚拟机(JVM)当前可用和总内存。`maxMemory()` 返回 JVM 的最大内存分配。这些方法有助于监控和优化内存使用。 3. 停止程序: `halt...
1. Java中的Runtime类以及它的常见方法如freeMemory(), totalMemory(), maxMemory(),这些方法分别用于获取JVM当前可用的内存量、已经分配的总内存量、以及JVM最大可用的内存量。还有一个方法availableProcessors()...
此外,还可以使用 Runtime.getRuntime().totalMemory() 和 Runtime.getRuntime().freeMemory() 方法分别获取当前 App 的总内存和剩余内存。 ```java float totalMemory = (float) (Runtime.getRuntime().total...
Java 的 Runtime 类提供了获取系统内存信息的方法,包括 freeMemory()、totalMemory() 和 maxMemory()。OperatingSystemMXBean 是 Java 的一个管理接口,提供了获取系统 CPU、内存、硬盘等信息的方法。 通过使用这...
我们可以使用 `totalMemory()` 方法获取总的内存大小,`freeMemory()` 方法获取剩余的内存大小,`maxMemory()` 方法获取最大可使用的内存大小。 使用 MonitorInfoBean 存储信息 在获取了计算机的 CPU 利用率和内存...
在Java编程语言中,`Runtime`类是每个Java应用程序的核心组成部分。它提供了与运行时环境交互的方法,使得程序能够执行一些系统级别的操作,如启动新进程、管理内存或者与操作系统进行交互。`Runtime`类是单例的,...
`Runtime`类提供了几个有用的方法,包括: - `totalMemory()`:返回当前JVM堆内存的总量,以字节为单位。 - `maxMemory()`:返回JVM堆内存的最大值,即JVM启动时设定的最大堆内存容量。 - `freeMemory()`:返回JVM...
例如,通过`Runtime.getRuntime().freeMemory()`可以获得当前JVM的空闲内存,`totalMemory()`返回总内存,而`maxMemory()`则返回JVM的最大可用内存。要获取物理内存信息,通常需要借助于操作系统的API,这在Java中...
Java的`java.lang.Runtime`类提供了获取系统内存的方法,而`java.lang.management.MemoryMXBean`和`MemoryUsage`类则提供了更详细的内存使用情况。以下是一些常见的内存获取代码: ```java import java.lang....
在实现自我监视内存使用的程序时,可以定期获取`Runtime.getRuntime().totalMemory()`、`freeMemory()`和`maxMemory()`等方法返回的值,来计算当前内存的使用情况,包括已分配的总内存、剩余的自由内存以及系统允许...
System.out.println("Total Memory: " + runtime.totalMemory()); System.out.println("Free Memory: " + runtime.freeMemory()); System.out.println("Max Memory: " + runtime.maxMemory()); } } ``` 总结,...
- 使用`java.lang.Runtime`类的`freeMemory()`、`totalMemory()`和`maxMemory()`方法可以获取Java程序的内存使用情况。通过计算`totalMemory()`与`freeMemory()`的差值可以得到当前堆内存使用量,进一步可以得出堆...
- 在Java中,可以通过`Runtime`类来获取系统的内存信息,如总内存、空闲内存等。 4. **获取CPU使用率**: - 对于Windows系统,可以通过读取系统性能计数器或使用`WMI (Windows Management Instrumentation)`来...
- `Runtime.getRuntime().totalMemory()`:返回当前JVM的总内存,包括已使用和空闲内存。 此外,还可以使用JConsole、VisualVM等工具,更直观地监控和分析JVM内存使用情况,这对于性能调优和问题排查极为有益。 ##...