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());
	}
}

  

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());
	}
}

  

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

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

拿StringBuffer说话,

StringBuffer可以和String相互转换

1、利用构造函数

2、用方法实现

String类StringBuffer类与StringBuilder类gc垃圾回收的更多相关文章

  1. String、StringBuffer、与StringBuilder的区别

    转载自博客园,原文链接:String.StringBuffer.与StringBuilder的区别 相信大家都知道StringBuffer.StringBuilder,但是这两个的用法都差不多,到底有 ...

  2. Java学习之二(线程(了解) JVM GC 垃圾回收)

    线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...

  3. 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>

    C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override    -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员)    -->override ...

  4. Java虚拟机笔记(二):GC垃圾回收和对象的引用

    为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...

  5. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  6. 乐字节Java|GC垃圾回收机制、package和import

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  7. 计时器 GC垃圾回收 demo

    计时器: public void start() { //定义计时器 Timer timer=new Timer(); //定义运行间隔(数字越小,速度越快) int interval=30; //创 ...

  8. JVM虚拟机 与 GC 垃圾回收

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.JVM体系结构概述 1.JVM 与系统.硬件 ​ JVM是运行在操作系统之上的,它与硬件没有直接的交 ...

  9. JVM和GC垃圾回收机制和内存分配

    JVM运行期间 线程共享 线程私有 线程共享: 方法区 堆方法区:存放可以共享数据,静态常量,类的共有方法属性字段等,可以共享的存在方法区. 堆:存放class对象 . 线程私有:本地方法栈 虚拟机栈 ...

  10. .Net平台的GC垃圾回收

    一.先了解下必备的知识前提 内存中的托管与非托管,可简单理解为: 托管:可借助GC从内存中释放的数据对象(以下要描述的内容点) 非托管:必须手工借助Dispose释放资源(实现自IDisposable ...

随机推荐

  1. 理解是最好的记忆方法 之 CSS中a链接的④个伪类为何有顺序

    理解是最好的记忆方法 之 CSS中a链接的④个伪类为何有顺序 在CSS中,a标签有4种伪类,分别为: a:link, a:visited, a:hover, a:active 对其稍有了解的前端er都 ...

  2. linux 查看机器的cpu,操作系统等命令

    看cpu信息,型号,几核 [root@f3 ~]# cat /proc/cpuinfo | grep name | cut -f2 -d:| uniq -c 16 Intel(R) Xeon(R) C ...

  3. 为WPF和Silverlight的Grid添加边框线(zz)

      Grid是WPF和Silverlight中的一个重要的布局元素,其他的布局元素还有StackPanel, Canvas, Border等等.从字面上说,Grid是一个表格的意思,它的使用也确实很方 ...

  4. shinydashboard包---为shiny提供BI框架

    1.安装 install.packages("shinydashboard") 2.基础知识 仪表盘有三个部分:标题.侧边栏,身体.下面是最最小的仪表面板页面的UI: ## ui. ...

  5. 学习编写Windows Live Writer插件

    1.参考链接 参考:http://www.cnblogs.com/liulun/archive/2009/05/27/1491116.html Live Writer API参考:http://msd ...

  6. hdu1019 Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  7. 模态视图(modalTrasitionStyle)如何适应不同的版本

    随着版本的更新,模态视图对版本也有不同的要求,那如何让模态视图适应多版本的要求呢?下面是小编的个人看法! -(void)presentModalVC { modalViewController *mo ...

  8. NOIp 2013 #2 花匠 Label:爆0的Water

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...

  9. HDU - Pseudoforest

    Description In graph theory, a pseudoforest is an undirected graph in which every connected componen ...

  10. 【BZOJ1179】 [Apio2009]Atm tarjan缩点+SPFA

    Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口 ...