String和StringBuffer占用内存情况,及修改程序运行时的栈内存
2010-10-15 23:16
387 查看
package com.xie.string;
//String
public class JavaMemory {
public static void main(String[] args){
String s="myclassisbig";
System.out.print("当前虚拟机可用的最大内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.print("循环前虚拟机以用内存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"M");
int count=0;
while(true){
try {
s+=s;
count++;
} catch (Error e) {
System.out.println("循环次数:"+count);
System.out.println("String的实际字节数:"+s.length()/1024/1024+"M");
System.out.println("循环后,以占用内存:"+Runtime.getRuntime().totalMemory()/1024/1024+"M");
System.out.println("捕获到的错误:"+e);
break;
}
}
/*
* String进行+=操作后,原来的String将不能再用,同时还会创建新的对象,占用的内存会比较大
* 进行+=操作后,引用改变,而gc可能还没来得及执行,所有导致很多垃圾对象。
*/
}
}
//运行结果:
当前虚拟机可用的最大内存:63M
循环前虚拟机以用内存:4M
循环次数:19
String的实际字节数:6M
循环后,以占用内存:63M
捕获到的错误:java.lang.OutOfMemoryError: Java heap space(栈内存)
----------------------------------------------------------------------------------------------------------------------
package com.xie.string;
public class JavaStringBufferMem {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("myclassisbig");
System.out.print("当前虚拟机可用的最大内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.print("循环前虚拟机以用内存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"M");
int count=0;
while(true){
try {
s.append(s);
count++;
} catch (Error e) {
System.out.println("循环次数:"+count);
System.out.println("String的实际字节数:"+s.length()/1024/1024+"M");
System.out.println("循环后,以占用内存:"+Runtime.getRuntime().totalMemory()/1024/1024+"M");
System.out.println("捕获到的错误:"+e);
break;
}
}
}
}
//运行结果:
当前虚拟机可用的最大内存:1016M
循环前虚拟机以用内存:4M
循环次数:24
String的实际字节数:192M
循环后,以占用内存:1016M
捕获到的错误:java.lang.OutOfMemoryError: Java heap space
在MyEclipse8.5中修改程序运行所需的栈内存:
工具栏点run->runconfigurations->arguments, 在VM arguments下填写:
--Xmx1024m
//String
public class JavaMemory {
public static void main(String[] args){
String s="myclassisbig";
System.out.print("当前虚拟机可用的最大内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.print("循环前虚拟机以用内存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"M");
int count=0;
while(true){
try {
s+=s;
count++;
} catch (Error e) {
System.out.println("循环次数:"+count);
System.out.println("String的实际字节数:"+s.length()/1024/1024+"M");
System.out.println("循环后,以占用内存:"+Runtime.getRuntime().totalMemory()/1024/1024+"M");
System.out.println("捕获到的错误:"+e);
break;
}
}
/*
* String进行+=操作后,原来的String将不能再用,同时还会创建新的对象,占用的内存会比较大
* 进行+=操作后,引用改变,而gc可能还没来得及执行,所有导致很多垃圾对象。
*/
}
}
//运行结果:
当前虚拟机可用的最大内存:63M
循环前虚拟机以用内存:4M
循环次数:19
String的实际字节数:6M
循环后,以占用内存:63M
捕获到的错误:java.lang.OutOfMemoryError: Java heap space(栈内存)
----------------------------------------------------------------------------------------------------------------------
package com.xie.string;
public class JavaStringBufferMem {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("myclassisbig");
System.out.print("当前虚拟机可用的最大内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.print("循环前虚拟机以用内存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"M");
int count=0;
while(true){
try {
s.append(s);
count++;
} catch (Error e) {
System.out.println("循环次数:"+count);
System.out.println("String的实际字节数:"+s.length()/1024/1024+"M");
System.out.println("循环后,以占用内存:"+Runtime.getRuntime().totalMemory()/1024/1024+"M");
System.out.println("捕获到的错误:"+e);
break;
}
}
}
}
//运行结果:
当前虚拟机可用的最大内存:1016M
循环前虚拟机以用内存:4M
循环次数:24
String的实际字节数:192M
循环后,以占用内存:1016M
捕获到的错误:java.lang.OutOfMemoryError: Java heap space
在MyEclipse8.5中修改程序运行所需的栈内存:
工具栏点run->runconfigurations->arguments, 在VM arguments下填写:
--Xmx1024m
相关文章推荐
- 使用CLR Profiler查看C#运行程序的内存占用情况
- VC6.0下怎样查看程序的运行时间及内存占用情况
- php测试程序运行时间和占用内存情况
- Linux下评估程序运行时间及内存占用情况的简便方法
- linux下,一个运行中的程序,究竟占用了多少内存?
- Android免Root权限Hook系统函数修改程序运行时内存指令逻辑
- Java程序运行前后内存使用情况
- C/C++编译的程序占用的内存情况详细解析
- 查看SWAP分区内存占用情况PY程序
- c/c++程序运行时的内存情况
- String,StringBuffer,StringBuilder效率与内存占用比较
- 一个C程序运行时的内存分配情况
- linux下,一个运行中的程序,究竟占用了多少内存?
- Linux下查看某一个程序运行所占用的内存
- vc下获取程序的运行时间和占用内存
- C/C++编译的程序占用的内存分配情况
- 修改monit配置,使系统内存达到某个值,记录系统资源占用情况
- linux下,一个运行中的程序,究竟占用了多少内存?
- 今天就教大家查看手机的内存使用情况,可以帮你查看自己的程序占用了多大的内存(图文说明)
- 特例情况下,用array of char代替string减少内存占用