String类StringBuffer类与StringBuilder类gc垃圾回收

String类的特点

直接赋值和new调用构造方法两种,

直接赋值时会将字符串常量入内存池,当其他变量再赋相同值时,不再在堆空间开辟内存

new构造方法会开辟两块堆内存空间,可以使用intern手工入池

public class  Thrd{
	public static void main(String[] args) {
		String str1="zibo";
		String str2="zibo";
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));
		String str3=new String("zibo").intern();
		System.out.println(str1==str3);
		System.out.println(str1.equals(str3));
      }
}

  String类一旦声明不可改变,因此在进行大批量修改时会产生大量的垃圾

public class  Thrd{
	public static void main(String[] args) {
		String str="zibo";
		for(int i=0;i<10;i++){
			str+=i;
		}
		System.out.println(str);
	}
}

  观察认为构造垃圾前后的内存状态(使用Runtime类)

public class  Thrd{
	public static void main(String[] args) {
		//Runtime run=new Runtime();
		Runtime run=Runtime.getRuntime();
		//内存状态
		System.out.println("内存状态");
		System.out.println("totalMemory()"+run.totalMemory());
		System.out.println("maxMemory()"+run.maxMemory());
		System.out.println("freeMemory()"+run.freeMemory());
		//构造垃圾
		String str="zibo";
		for(int i=0;i<2000;i++){
			str+=i;
		}
		System.out.println("构造垃圾后的内存状态");
		System.out.println("totalMemory()"+run.totalMemory());
		System.out.println("maxMemory()"+run.maxMemory());
		System.out.println("freeMemory()"+run.freeMemory());
	}
}

  String类StringBuffer类与StringBuilder类gc垃圾回收

gc回收

public class  Thrd{
	public static void main(String[] args) {
		//Runtime run=new Runtime();
		Runtime run=Runtime.getRuntime();
		//内存状态
		System.out.println("内存状态");
		System.out.println("totalMemory()"+run.totalMemory());
		System.out.println("maxMemory()"+run.maxMemory());
		System.out.println("freeMemory()"+run.freeMemory());
		//构造垃圾
		String str="zibo";
		for(int i=0;i<2000;i++){
			str+=i;
		}
		run.gc();
		System.out.println("gc认为回收垃圾以后的内存状态");
		System.out.println("totalMemory()"+run.totalMemory());
		System.out.println("maxMemory()"+run.maxMemory());
		System.out.println("freeMemory()"+run.freeMemory());
	}
}

  String类StringBuffer类与StringBuilder类gc垃圾回收

【当需要进行频繁操作字符串时】

可以使用StringBuffer(synchronized线程安全的)或者StirngBuilder(not Thread safe),这是最大的区别

拿StringBuffer说话,

StringBuffer可以和String相互转换

1、利用构造函数

2、用方法实现

上一篇:在IDEA中编辑struts国际化properties文件


下一篇:《西部世界》S2E9:蝶化庄周,浮生若梦