Runtime 类

  关于 Java 中的 Runtime 类对象,每一个 Java 应用都只有一个 Runtime 对象单实例,而 Runtime 类是不能通过 new 方法创建的。因为在这个类中,它将其构造方法私有化了,并提供了一个恶汉式的单例设计模式来获得 Runtime 对象。下面是这个类上述中的关键代码:

  1. public class Runtime {
  2. private static Runtime currentRuntime = new Runtime();
  3. public static Runtime getRuntime() {
  4. return currentRuntime;
  5. }
  6. private void Runtime() {};
  7. }

  

  Runtime 有三个查看 Java 应用与内存相关的方法,freeMemory, totalMemory, maxMemory,现在通过代码展示了解一下:

  1. public class Test {
  2. public static void main(String[] args) {
  3. Runtime runtime = Runtime.getRuntime();
  4. // 返回 java 虚拟机将会尝试去获取的最大内存容量
  5. System.out.println("系统最大可用空间: " + convertBytesToM(runtime.maxMemory()));
  6. // 返回 java 虚拟机的总共内存量。这个值将会随着时间变化,具体取决于主机环境。
  7. System.out.println("系统总共内存量: " + convertBytesToM(runtime.totalMemory()));
  8. // 返回java虚拟机可用的内存容量。可以调用 gc 方法来增加 freeMemory
  9. System.out.println("系统可用内存量:" + convertBytesToM(runtime.freeMemory()));
  10. }
  11. private static long convertBytesToM(long bytes) {
  12. return bytes/1024/1024;
  13. }
  14. }

  在我的本机上,结果显示如下:

尝试创建对象来提高 java 虚拟机占用的总内存和减少可用内存,并使用“垃圾回收”方法,来提高 freeMemory

  代码如下:

  1. public class Test {
  2. public static void main(String[] args) {
  3. Runtime runtime = Runtime.getRuntime();
  4. // 返回 java 虚拟机将会尝试去获取的最大内存容量
  5. System.out.println("1.系统最大可用空间: " + convertBytesToM(runtime.maxMemory()) + " MB");
  6. // 返回 java 虚拟机的总共内存量。这个值将会随着时间变化,具体取决于主机环境。
  7. System.out.println("1.系统总共内存量: " + convertBytesToM(runtime.totalMemory()) + " MB");
  8. // 返回java虚拟机可用的内存容量。可以调用 gc 方法来增加 freeMemory
  9. System.out.println("1.系统可用内存量:" + convertBytesToM(runtime.freeMemory()) + " MB");
  10. System.out.println("-----------------------------------------------------------");
  11. String garbageStr = "";
  12. for (int i = 0; i < 20000; i++) {
  13. garbageStr += i;
  14. }
  15. System.out.println("2.系统最大可用空间: " + convertBytesToM(runtime.maxMemory()) + " MB");
  16. System.out.println("2.系统总共内存量: " + convertBytesToM(runtime.totalMemory()) + " MB");
  17. System.out.println("2.系统可用内存量:" + convertBytesToM(runtime.freeMemory()) + " MB");
  18. System.out.println("-----------------------------------------------------------");
  19. runtime.gc();
  20. System.out.println("3.系统最大可用空间: " + convertBytesToM(runtime.maxMemory()) + " MB");
  21. System.out.println("3.系统总共内存量: " + convertBytesToM(runtime.totalMemory()) + " MB");
  22. System.out.println("3.系统可用内存量:" + convertBytesToM(runtime.freeMemory()) + " MB");
  23. }
  24. private static long convertBytesToM(long bytes) {
  25. return bytes/1024/1024;
  26. }
  27. }

  结果如下显示:

  当创建循环创建字符串对象之后, Java 应用总内存根据主机情况从 307 MB —> 1783 MB,而对象占用了有 1783 - 1687 = 96 MB 的内存。其中有很多是废弃的对象,但同时占用了内容。Java 虚拟机的垃圾回收机制会在需要的时候回收这些垃圾对象,它的处理是另开一个独立的线程即使程序并没有显式地去调用。 不过有时,我们可能出于当前情况性能的考虑,需要立即进行垃圾对象回收,这时就可以调用 gc() 方法。如上图所示,调用此方法后,系统回收了相当一部分内存,1687 —> 1751.

null

时间: 2024-10-08 09:17:17

Runtime 类的相关文章

深入研究java.lang.Runtime类

深入研究java.lang.Runtime类 一.概述      Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.      一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用.      一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为.

JAVA API(二)System类与Runtime类

1.System类与Runtime类 1.1System类 System类对我们来说并不陌生,在之前学习的知识中,当我们需要打印结果时,使用的都是"System.out.println()"语句进行打印输出,这句代码中就使用了System类.这个类中定义了与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可.下表是System类常用的一些方法. 方法声明 功能描述 static void exit(int status)

浅析Java.lang.Runtime类

一.概述      Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.      一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用.      一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为.       当Applet和其他不被信任的代

谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法 Java虚拟机threadJVM 最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有

Runtime类

Runtime类也在java.lang包中,这个类没有提供构造器,但是提供的却非静态方法,而是在方法中提供了一个静态方法来返回当前进程的Runtime实例,采用的单例设计模式. 其作用:可以对当前java程序进程进行操作.打开本机程序.获取虚拟机信息等. 举例:打开一个windows程序 import java.lang.*; import java.util.*; import java.io.*; class Test { public static void main(String[] a

Java中的Runtime类

Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: 1 package Main; 2 3 public class Main 4 { 5 public static void main(String[] args) throws Exception 6 { 7 Runtime runtime = Runtime.getRuntime(); 8 System.out.println("

Runtime类及其常用方法

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.可以通过 getRuntime 方法获取当前运行时. 常用方法: 1.public static Runtime getRuntime() 返回与当前 Java 应用程序相关的运行时对象.Runtime 类的大多数方法是实例方法,并且必须根据当前的运行时对象对其进行调用. 2.Process exec(String command)       在单独的进程中执行指定的字符串命令. 3.long fre

Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加.这些人对freeMemory()这 个方法的意义应该有一些误解,他们以为这个方法返回的是操纵系统的剩余可

深入研究java.lang.Runtime类(转)

一.概述      Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.      一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用.      一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为.       当Applet和其他不被信任的代

JAVA中Runtime类以及exec()方法,Process的使用

package ioTest.io1; /* * Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. * 这也是jvm实现跨平台的一个重要原因. * 可以通过 getRuntime 方法获取当前运行时. * API分析: * public class Runtime extends Object * 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. * 可以通过 getRuntime 方法获