当前位置: 首页 > news >正文

Runtime 类

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

  1. publicclassRuntime{
  2. privatestaticRuntime currentRuntime =newRuntime();
  3. publicstaticRuntime getRuntime(){
  4. return currentRuntime;
  5. }
  6. privatevoidRuntime(){};
  7. }

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

  1. publicclassTest{
  2. publicstaticvoid 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. privatestaticlong convertBytesToM(long bytes){
  12. return bytes/1024/1024;
  13. }
  14. }

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

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

  代码如下:

  1. publicclassTest{
  2. publicstaticvoid 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. privatestaticlong convertBytesToM(long bytes){
  25. return bytes/1024/1024;
  26. }
  27. }

  结果如下显示:

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



null



转载于:https://www.cnblogs.com/archy2016/p/7400102.html

相关文章:

  • vue element tree 后台 数据转换_mallcloud商城vue
  • excel统计行数_WPS| 12个简单的Excel技巧,却能让造价人变得如此逆天!
  • RandomAccess接口
  • python用input输入list_python怎么用input函数输入一个列表
  • sublime text 2 卸载与重装
  • 数字图像中255表示什么_数字图像处理学习之(一):图像与图像的表示
  • 初见Hadoop—- 搭建MyEclipse 访问HDFS 上的文件
  • 有些网站打开一半空白_如何发一条空白的朋友圈
  • 一台服务器能承载多少用户_冰淇淋机多少钱一台?做冰淇淋也能小有成就
  • json web token 网上学习笔记
  • python中函数包括_python函数
  • bzoj1059 [ZJOI2007]矩阵游戏
  • python 直方图的绘制方法全解_python可视化:matplotlib绘制直方图进阶篇!
  • CPU位数、操作系统位数、机器字长、C/C++基本数据类型长度
  • python决策树分类 导入数据集_python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模...
  • 2017年终总结、随想
  • Computed property XXX was assigned to but it has no setter
  • Facebook AccountKit 接入的坑点
  • input实现文字超出省略号功能
  • JAVA并发编程--1.基础概念
  • leetcode讲解--894. All Possible Full Binary Trees
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Rancher如何对接Ceph-RBD块存储
  • React-flux杂记
  • Vim 折腾记
  • windows-nginx-https-本地配置
  • 闭包--闭包之tab栏切换(四)
  • 从零开始在ubuntu上搭建node开发环境
  • 动态规划入门(以爬楼梯为例)
  • 将 Measurements 和 Units 应用到物理学
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 用Python写一份独特的元宵节祝福
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​决定德拉瓦州地区版图的关键历史事件
  • # centos7下FFmpeg环境部署记录
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 数据结构
  • #QT项目实战(天气预报)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (2020)Java后端开发----(面试题和笔试题)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Oracle)SQL优化技巧(一):分页查询
  • (Python) SOAP Web Service (HTTP POST)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (论文阅读40-45)图像描述1
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • ./configure、make、make install 命令
  • .net CHARTING图表控件下载地址
  • .net mvc 获取url中controller和action
  • .NET/C# 获取一个正在运行的进程的命令行参数