博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Runtime 类
阅读量:5930 次
发布时间:2019-06-19

本文共 2828 字,大约阅读时间需要 9 分钟。

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

public class Runtime {    private static Runtime currentRuntime = new Runtime();    public static Runtime getRuntime() {        return currentRuntime;    }    private void Runtime() {};}

  

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

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

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

image

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

  代码如下:

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

  结果如下显示:

image

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

转载地址:http://afytx.baihongyu.com/

你可能感兴趣的文章
JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别
查看>>
delphi 编译生成ipa文件 adhoc步骤
查看>>
ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver
查看>>
从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
查看>>
Odoo Website 替换 Summernote 为第三方富文本编辑器
查看>>
【转】游戏程序员养成计划
查看>>
让git for windows记住密码
查看>>
Asp.Net时间戳与时间互转
查看>>
如何终止java线程
查看>>
从tcp原理角度理解Broken pipe和Connection reset by peer的区别
查看>>
sloth——算法工程师标注数据的福音
查看>>
恢复计算机崩溃数据的五款最佳Linux发行版
查看>>
【MySQL】MySQL快速插入大量数据
查看>>
weblogic重置用户名密码。
查看>>
C语言扩展Python模块
查看>>
父类不能转换成子类
查看>>
李洪强iOS开发之带placeHolder的Textview
查看>>
编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议93~97)
查看>>
Android 高仿微信表情输入与键盘输入详解
查看>>
【faster-rcnn】训练自己的数据——修改图片格式、类别
查看>>