String对象和StringBuffer对象末尾追加元素空间效率问题
2015-11-16 22:19
459 查看
问题定义:使用String类和StringBuffer类分别定义两个对象,然后分别在对象的末尾添加10000个字符串。比较两者空间的使用情况。 使用freeMemory()方法和gc()方法比较String和StringBuffer对象在末尾追加元素的空间使用情况。运行结果:public class RuntimeDemo01{ public static void main(String args[]){ Runtime run = Runtime.getRuntime(); System.out.println("maxMemory = " + run.maxMemory() + "M");//返回java虚拟机的最大内存容量 System.out.println("freeMemory = " + run.freeMemory() + "M");//返回java虚拟机的空闲内存量 String str = "hello ";//定义str对象 for(int i = 0; i < 10000; ++i){ str += "world ";//在str对象末尾追加一个字符串,此过程又从新开辟空间,耗费内存,也耗时 } System.out.println("freeMemory = " + run.freeMemory()/1024 + "M");//返回此时空闲内存量 run.gc();//进行垃圾回收 System.out.println("freeMemory = " + run.freeMemory()/1024 + "M");//垃圾回收以后的空闲内存空间 } };运行结果:
maxMemory = 65088M
freeMemory = 4846M
freeMemory = 2695M
freeMemory = 4803M[code]public class RuntimeDemo02{
public static void main(String args[]){
Runtime run = Runtime.getRuntime();
System.out.println("maxMemory = " + run.maxMemory() / 1024 + "M");//返回java虚拟机的最大内存容量
System.out.println("freeMemory = " + run.freeMemory() / 1024 + "M");//返回java虚拟机的空闲内存量
StringBuffer buf = new StringBuffer();//定义一个StringBuffer对象
buf.append("hello ");
for(int i = 0; i < 10000; ++i){
buf.append(" world");
}
System.out.println("freeMemory = " + run.freeMemory()/1024 + "M");
run.gc();
System.out.println("freeMemory = " + run.freeMemory()/1024 + "M");
}
};
maxMemory = 65088M
freeMemory = 4846M
freeMemory = 4562M
freeMemory = 4766M[/code]
分析:程序一和程序二在刚开始执行时,最大内存容量和空闲内存容量分别是65088M和4846M。当在String对象末尾追加10000字符串时,空闲内存容量为2695M,而在StringBuffer对象末尾追加10000个字符串时,空闲内存容量为4562M,两者空闲内存量差距明显,主要原因是:在String对象末尾追加字符串时,又重新开辟一个新的空间来存储新的字符串,而使用StringBuffer时,则不需要开辟新的空间,直接在末尾追加就可以。但是使用垃圾回收器对垃圾空间进行回收以后。发现程序一的空闲内存量要大于程序二的空闲内存量。因为使用StringBuffer有额外的空间开销。
相关文章推荐
- js中with、this的用法
- javascript中代码的优化(1)
- JavaScript学习随记——Function
- CSS制作水平垂直居中对齐
- CSS制作水平垂直居中对齐
- JavaScript和JQuery和angularjs操作select
- seajs模块加载
- [Err] 1222 - The used SELECT statements have a different number of columns
- jquery 使用方法
- html5学习(1)
- CSS定位的兼容性问题
- JS正则表达式
- jquery 自制广告轮播小插件
- 南大软院大神养成计划--第一天学习HTML+CSS的基础归纳
- 南大软院大神养成计划--html css基础
- js和jquery获取父级元素、子级元素、兄弟元素的方法
- js-案例:下拉列表左右选择分析
- Extjs-4.2.1(一)——编辑 hello word
- CSS-div高度100%设置问题
- jquery 使用方法(转载)