一个关于Runtime中的freeMemory()的奇怪输出 stringbuffer 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这很正常,虚拟机的内存不是说一上来就给你分多少,然后就不变了。是会根据程序的需要变化的。你可以run.totalMemory();看看总内存肯定也是在变化的啊。 请问我测试了下,打印结果如下 ,为什么会totalMemory会变大呢? Runtime run = Runtime.getRuntime(); System.out.println("内存总数" + run.totalMemory()); System.out.println("1.空闲的内存空间" + run.freeMemory()); StringBuffer buf = new StringBuffer(""); for (int i = 0; i < 5000000; i++) { buf = buf.append(i); } System.out.println("2.空闲的内存空间" + run.freeMemory()); run.gc(); System.out.println("3.空闲的内存空间" + run.freeMemory()); System.out.println("内存总数" + run.totalMemory());内存总数551157761.空闲的内存空间545388642.空闲的内存空间170684163.空闲的内存空间168129552内存总数168493056 total 是 JVM 申请来的,free 当然就是还没用掉的。不要把 total 当成你的电脑的所有内存就是了。 通过Runtime获取的totalMemory和freeMemory获取的内存量和空闲内存量不是指操作系统管理的内存,而是虚拟机管理的内存。虚拟机说白了也就是操作系统的一个进程而已,你通过任务查看器看看进程,有哪个进程的内存是一直不变化的啊? 谢谢,但是我的意思是为什么之前的空闲内存是1.空闲的内存空间15437152,按到道理应该是执行了那个for循环之后,空闲的内存应该变小啊,但是为什么还会比之前的空闲的内存小呢?当我把for循环的次数变小的时候,是执行for循环之后的内存变小的,可是我慢慢的把执行的次数变大的时候,就出现了这个问题 谢谢,但是我的意思是为什么之前的空闲内存是1.空闲的内存空间15437152,按到道理应该是执行了那个for循环之后,空闲的内存应该变小啊,但是为什么还会比之前的空闲的内存小呢?当我把for循环的次数变小的时候,是执行for循环之后的内存变小的,可是我慢慢的把执行的次数变大的时候,就出现了这个问题唉,我发现我都白说了。例如:你的虚拟机一启动向操作系统申请了64M内存,程序用了30M,那么这时候就还剩余34M,接着又用了2M,那么剩余32M,当剩余的内存很少的时候,例如已经用了60M了,只剩下4M内存,JVM就觉得内存不够用了。再次向操作系统申请内存,这次申请了128M,那这时候剩余132M,岂不是变大了吗? javac编译时去哪里找class的 如何让图标、标签文字等随窗口大小改变 java实现背景图片透明,怎样才能显示桌面 初学,自学,请指点一下我写的tablet类 java多线程在多核多cpu服务器上的性能问题 怎么把浏览器打开的时候就全屏呢?? 关于jwsdp 2.0中xjc catalog.xsd怎么不生成generated\impl\ 和 generated\impl\runtime\下的东西啊啊? 如何在java中对mysql数据库是否有某项记录进行判断? jdk1.4的源码库 关于JAVA的执行(JAVA)。能执行JSP,但....请帮忙。 Tree结构封装求助 如何确定线程优先级
你可以run.totalMemory();看看总内存肯定也是在变化的啊。
Runtime run = Runtime.getRuntime();
System.out.println("内存总数" + run.totalMemory());
System.out.println("1.空闲的内存空间" + run.freeMemory());
StringBuffer buf = new StringBuffer("");
for (int i = 0; i < 5000000; i++) {
buf = buf.append(i);
}
System.out.println("2.空闲的内存空间" + run.freeMemory());
run.gc();
System.out.println("3.空闲的内存空间" + run.freeMemory());
System.out.println("内存总数" + run.totalMemory());内存总数55115776
1.空闲的内存空间54538864
2.空闲的内存空间17068416
3.空闲的内存空间168129552
内存总数168493056
虚拟机说白了也就是操作系统的一个进程而已,你通过任务查看器看看进程,有哪个进程的内存是一直不变化的啊?
谢谢,但是我的意思是为什么之前的空闲内存是1.空闲的内存空间15437152,
按到道理应该是执行了那个for循环之后,空闲的内存应该变小啊,但是为什么还会比之前的空闲的内存小呢?
当我把for循环的次数变小的时候,是执行for循环之后的内存变小的,可是我慢慢的把执行的次数变大的时候,就出现了这个问题
谢谢,但是我的意思是为什么之前的空闲内存是1.空闲的内存空间15437152,
按到道理应该是执行了那个for循环之后,空闲的内存应该变小啊,但是为什么还会比之前的空闲的内存小呢?
当我把for循环的次数变小的时候,是执行for循环之后的内存变小的,可是我慢慢的把执行的次数变大的时候,就出现了这个问题唉,我发现我都白说了。例如:你的虚拟机一启动向操作系统申请了64M内存,程序用了30M,那么这时候就还剩余34M,接着又用了2M,那么剩余32M,当剩余的内存很少的时候,例如已经用了60M了,只剩下4M内存,JVM就觉得内存不够用了。再次向操作系统申请内存,这次申请了128M,那这时候剩余132M,岂不是变大了吗?