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

内存释放_free_memory_ 内存释放_free_memory_ 基于 移动开发,Android 系统 使用. 立即下载

@转载自:http://7sunet.iteye.com/blog/285007


最近在网上看到一些人讨论到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 Untitled1 和java  -Xms80m -Xmx80m Untitled1 运行,看看结果如何,有助于理解上面的阐述。

Java代码 
  1. public class Untitled1
  2.  {      
  3.     public Untitled1() {}      
  4.     public static void main(String[] args)
  5.    {  
  6.     System.out.println(Runtime.getRuntime().freeMemory());  
  7.     System.out.println(Runtime.getRuntime().totalMemory());  
  8.     System.out.println(Runtime.getRuntime().maxMemory());  
  9.     long t = System.currentTimeMillis();  
  10.     try
  11.     {  
  12.       Thread.sleep(30000);  
  13.     } 
  14.     catch (Exception e)
  15.     {  
  16.       e.printStackTrace();  
  17.     }  
  18.     String[] aaa = new String[2000000];  
  19.     System.out.println(Runtime.getRuntime().freeMemory());  
  20.     System.out.println(Runtime.getRuntime().totalMemory());  
  21.     System.out.println(Runtime.getRuntime().maxMemory());  
  22.     try
  23.     {  
  24.       Thread.sleep(30000);  
  25.     } 
  26.     catch (Exception e)
  27.     {  
  28.       e.printStackTrace();  
  29.     }  
  30.     for (int i = 0; i < 2000000; i++)
  31.     {  
  32.       aaa[i] = new String("aaa");  
  33.     }  
  34.     System.out.println(Runtime.getRuntime().freeMemory());  
  35.     System.out.println(Runtime.getRuntime().totalMemory());  
  36.     System.out.println(Runtime.getRuntime().maxMemory());  
  37.     try
  38.     {  
  39.       Thread.sleep(30000);  
  40.     } 
  41.     catch (Exception e)
  42.     {  
  43.       e.printStackTrace();  
  44.     }  
  45.   }  
  46. } 

SAP CEWB 高效批量调整工艺路线与BOM的实战指南 本文详细介绍了SAP CEWB工具在批量调整工艺路线与BOM中的高效应用。通过实战案例和操作指南,帮助制造业企业快速掌握批量修改技巧,显著提升工作效率,避免手工操作带来的错误和耗时。特别适合需要频繁更新工艺路线和BOM的企业用户。 阅读详情

相关推荐

学术规范与论文写作(雨课堂)研究生 全部答案

1:如何造就优秀的学术论文 论文语法判断题 :全部是错的 2:如何撰写学术论文 3: SCI论文写作经验分享 4:论文写作与投稿技巧 5:学术伦理道德 答案仅供参考,研究生生活不易,大家如果有时间的话,还是可以学习学习的,毕竟老师讲的不错。加油,希望读研的每一个人都能顺利毕业! ...

Always-Learning 13万+

Runtime类中的freeMemory,totalMemory,maxMemory方法,查看内存情况

最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。 其实主要是因为这些人对freeMemory()这 个方法的意义应该有一些误解,(今天我也遇到啦。哈哈哈)大多数人以

Java程序源 1495

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

文章目录准备一、使用代码生成器1.数据库2.导入表并生成代码二、导入代码文件1.新建一个模块2.导入zip代码文件3.模块环境配置添加菜单和访问地址总结 准备 前提要把系统启动起来,部分教程可以参考这边文章若依框架RuoYi前后端分离项目导入IDEA及运行启动 但是完全参考这篇文章还是不能把项目启动起来,因为这篇文章没有说明数据库。 我是用的是本地数据库,采用xampp+Navicat的组合来部署和访问数据库。打开Navicat,连接并创建数据库ry-vue并导入数据脚本ry_20191008.sql,q

dream_coke的博客 1万+

java freememory 单位_Java基础(九)Runtime类freeMemory,totalMemory,maxMemory

Runtime类的freeMemory,totalMemory,maxMemory三个方法反映的都是java这个进程的内存情况,跟操作系统的内存根本没有关系。maxMemory()方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时 候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是6410241024...

weixin_36416921的博客 605

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器是多种方案中的优选项!是一种快速、准确、可靠、应用广泛的传感方案!可有效监测锂离子电池热失控风险,保障化学能储能电站安全!

chicheng_danxin的博客 2413

RK3568实现蓝牙音箱功能

A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。注意A2DP协议要与AVRCP协议区分开。A2DP是传输音频的,而AVRCP是用来控制音频的。这里我用到的是RK3568 Android11。

leikko的博客 1176

java freememory 单位_java里的totalMemory()、maxMemory()、freeMemory()究竟是什么。。。

totalMemory():返回Java虚拟机中的内存总量。maxMemory():返回Java虚拟机试图使用的最大内存量。freeMemory():返回Java虚拟机中的空闲内存量。这是API的解释。我写了这么一段代码p...totalMemory() :返回 Java 虚拟机中的内存总量。maxMemory() :返回 Java 虚拟机试图使用的最大内存量。freeMemory() :返回 ...

weixin_39915204的博客 812

Muse Spark:功能、性能测试及使用方法

对于一个仅用九个月时间从零开始重建的团队来说,这样的健康状况和多模态测试结果无疑是迈出了坚实的第一步,并且经受住了独立测试的考验。Muse Spark 为每个产品确定了最重要的主题(A 产品的发布策略、B 产品的定价策略、C 产品的规模化策略),并提出了切实可行的具体行动方案。抽象视觉推理也遵循同样的模式:Muse Spark 的 ARC-AGI-2 得分为 42.5,而 GPT-5.4 和 Gemini 的得分都在 70 分左右。他的离职是由于组织结构的变化限制了他的角色,以及团队转向闭源开发。

xiaoshun007的专栏 124

用Java获得CPU,内存使用率

IMonitorService接口: public interface IMonitorService { public MonitorInfoBean getMonitorInfoBean() throws Exception; } MonitorInfoBean类: /*采集系统存取...

xiaoyaGrace的博客 755

​非线性分析-增加位移量可能出现下面错误。虽然求解无法在所有时间点完成,但在某些点上仍能够求解部分结果。请参阅“帮助系统”中的故障排除,以了解更多信息详情。由于受约束,规划求解引擎无法收敛

基于收敛状态拆分载荷步‌:在已收敛的载荷步基础上,将未收敛的关键区域拆分为更细的子步,比如在载荷突变点前设置5~10个子步,逐步加载。替换冲突约束为弱约束‌:若存在约束冲突,将刚性约束替换为弱弹簧约束(刚度设为1e-6~1e-4),既限制刚体位移,又不影响结构的变形自由度,命令流:SPRING, NODE, K, 1e-6。部分区域约束完整,但存在未被约束的刚体自由度,或约束类型与大变形/接触逻辑冲突,比如某部件的位移约束在初始阶段有效,但大变形后约束位置脱离实际受力点,导致求解器在该阶段无法收敛。

qq_15963745的博客 145

VIVADO IP核之FIR插值器多相滤波仿真

网络上有许多文章介绍FIR低通滤波器的使用,包括仿真。关于FIR低通滤波器的使用,我之前的文章已经介绍过了,本文将继续深入介绍FIR插值器多相滤波的使用方法,并将FIR插值多相滤波的结果与MATLAB仿真计算的结果比较,验证了FIR插值器多相滤波使用正确。

m0_66360845的博客 3383

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

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

xiaoshang的专栏 1105

《无线传感网络 matlab》:从入门到实践

这就是如何使用Matlab建立一个简单的无线传感网络并进行仿真的方法。当然,这只是一个入门级的示例,真正的无线传感网络可能会更加复杂和庞大。首先,我们需要创建一个无线传感网络的基础结构。接下来,我们需要定义一个数据包的格式,以便节点之间可以交换信息。无线传感网络是一种由无线传感器节点组成的、自组织的网络。现在,我们可以开始编写节点代码了。我们将使用Matlab提供的工具箱来构建一个简单的无线传感网络,并对其进行仿真和分析。现在,我们可以将这个节点复制9次,以创建一个包含10个节点的无线传感网络。

NoerrorCode的博客 296

java system.freememory()_关于java:什么是Runtime.getRuntime()。totalMemory()和freeMemory()?...

我一直想知道Runtime.getRuntime()。totalMemory(),Runtime.getRuntime()。freeMemory()和Runtime.getRuntime()。maxMemory()的确切含义是什么。我的理解是,Runtime.getRuntime().totalMemory()返回我的进程正在使用的总内存。 那是对的吗?freeMemory()和maxMemory...

weixin_39982580的博客 1173

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【java中的JVM调优】

java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对freeMemory()这 个方法的意义应该有一些误解,他们认为这个方法返回的是操作系统的剩余可用内存,其实根本就不是这样的。这三个方

qq_41610493的博客 215

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

--Too small initial heap for new size specified

虽然Java屏蔽了一下内存细节,但是有时候,了解一下这些常识还是有好处的,特别是一些面试,总是盯着这些玩意不放手。   JVM启动以后,会分配两类内存区域,一类用于开发人员使用,比如保存一些变量,对象等,一类JVM自己使用,比如存放一些class类和描述。   1,第一类内存区域又可以分为栈(stack)、堆(heap),还有一些静态存储区域,这部分的内存在JVM启动的时候,可以用参数进行配置: ...

weixin_33743703的博客 1488

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Runtime类 & 修改jvm内存

Runtime类 & 修改jvm内存Runtime类exec(command) 在单独的进程中执行指定的字符串命令exit(int status) 退出jvm System.exit(); 内部调用runtime.exit();获取jvm的内存修改jvm内存扩展 : 修改程序运行参数:通过程序运行参数输入数据 Runtime类 每个 Java 应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime方法获取当前运行时。 exec(command)

有一颗前端心的后端开发小哥 390

java的xms与xmx和服务器内存_JAVA_OPTS参数-Xms和-Xmx的作用

提到 -Xms 和 -Xmx参数,不得不说到 java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory() 这几个方法的一些问题,这三个方法反映的都是 java这个进程的内存情况,跟操作系统的内存根本没有关系。下面结合totalMemory(), maxMemory()一起来解释。1. maxMemory()这个方法返回的是java虚拟机(...

weixin_39631932的博客 446

JVM实战(二一): -Xss -Xms -Xmx -Xmn 参数设置

XmnXmsXmxXss有什么区别 Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。 -Xms 堆内存的初始大小,默认为物理内存的1/64 -Xmx 堆内存的最大大小,默认为物理内存的1/4 -Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn -Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生

mingyuli的博客 1万+

编辑器查看内存使用情况(抄的)

使用java代码也是可以查看jvm内存使用情况的,如果你经验比较丰富的话,应该是知道的,那就是使用Runtime,Runtime对java的运行环境进行的封装,可以得到jvm的状态信息,使用Runtime.getRuntime()就可以得到Runtime的引用,代码如图所示。注意,上面的运行得到的结果单位是字节,如果想转换为M的话,需要把得到的结果除以(1024*1024),因为1M = 1024K,1K = 1024byte。上面介绍了Runtime的几个参数,下面我们运行一下看看结果,如图所示。

weixin_44887276的博客 174

JVM调优总结 -Xms -Xmx -Xmn -Xss

Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。 Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。 Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。 以上三个...

暴走的石头 191

linux 的jvm调优,(转)JVM调优

1、freeMemory(), totalMemory(), maxMemory()比较最近在网上看到一些人讨论到java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着java程序往前运行,创...

weixin_39842937的博客 540

JAVA 内存的那些事

(转载)固然Java屏蔽了一下内存细节,但是有时候,了解一下这些常识还是有好处的,特别是一些口试,总是盯着这些玩意不放手。   JVM启动以后,会分配两类内存区域,一类用于开发职员使用,比如保存一些变量,对象等,一类JVM自己使用,比如存放一些class类和描述。   1,第一类内存区域又可以分为栈(stack)、堆(heap),还有一些静态存储区域,这部分的内存在JVM启动的时候,可以...

Knowledge management 伍波露 219

设置JVM内存设置

一、设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定; -Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; -Xmn   Java Heap Young区大小,不熟悉最好保

菜鸟小木干的博客 552
上一篇: Q:JDK6中的substring()方法容易导致内存泄露而JDK7不会出现这样的情况的原因
下一篇: K:JVM调优总结 -Xms等
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值