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

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垃圾回收的更多相关文章
- String、StringBuffer、与StringBuilder的区别
转载自博客园,原文链接:String.StringBuffer.与StringBuilder的区别 相信大家都知道StringBuffer.StringBuilder,但是这两个的用法都差不多,到底有 ...
- Java学习之二(线程(了解) JVM GC 垃圾回收)
线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...
- 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>
C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员) -->override ...
- Java虚拟机笔记(二):GC垃圾回收和对象的引用
为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- 乐字节Java|GC垃圾回收机制、package和import
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...
- 计时器 GC垃圾回收 demo
计时器: public void start() { //定义计时器 Timer timer=new Timer(); //定义运行间隔(数字越小,速度越快) int interval=30; //创 ...
- JVM虚拟机 与 GC 垃圾回收
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.JVM体系结构概述 1.JVM 与系统.硬件 JVM是运行在操作系统之上的,它与硬件没有直接的交 ...
- JVM和GC垃圾回收机制和内存分配
JVM运行期间 线程共享 线程私有 线程共享: 方法区 堆方法区:存放可以共享数据,静态常量,类的共有方法属性字段等,可以共享的存在方法区. 堆:存放class对象 . 线程私有:本地方法栈 虚拟机栈 ...
- .Net平台的GC垃圾回收
一.先了解下必备的知识前提 内存中的托管与非托管,可简单理解为: 托管:可借助GC从内存中释放的数据对象(以下要描述的内容点) 非托管:必须手工借助Dispose释放资源(实现自IDisposable ...
随机推荐
- express-6 请求和响应对象(1)
URL的组成部分 协议: 协议确定如何传输请求.我们主要是处理http和https.其他常见的协议还有file和ftp. 主机名: 主机名标识服务器.运行在本地计算机(localhost)和本地网络的 ...
- Java数组课后作业
1.运行TestArrays.java,了解Arrays中的一些重要方法的用法. Arrays.equals(a 1, a2):判断数组是否相等. int[] b = Arrays.copyOf(a, ...
- Java List与数组之间的转换
http://blog.csdn.net/kingzone_2008/article/details/8444678
- Docker使用-v挂载主机目录到容器后出现Permission denied
1. 在挂载主机目录的到容器后,操作挂载的目录出现权限问题: # 将主机上的/data/share/master目录挂载到容器的/opt/share目录docker run -it --name=ma ...
- 简单的css 菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HIVE 创建外部分区表--利用HUE不能创建外部表
Create EXTERNAL table obd_data_2( imei string, ts timestamp, fuel_instant float, gps_speed float, gp ...
- Redis入门指南
随着互联网业务对性能需求日益强烈,作为Key/Value存储的Redis具有数据类型丰富和性能表现优异的特点.如果能够熟练地驾驭它,不管是把它用做缓存还是存储,对很多大型应用都很多帮助.新浪作为世界上 ...
- Git常用命令举例
clone一个git project到本地 git clone https://github.com/huahuiyang/network-certification.git 到这个目录下,可以发现有 ...
- 【SAP BO】【WEBI】【转】Webi实现动态选择度量
我们都知道Web Intelligence具有高级的分析功能,是一个非常灵活的报表工具.在这篇文章里,我会演示一个使用Webi实现动态选择度量对象的方案.首先解释一下什么是”动态选择度量”:例如我们有 ...
- 【原】iOS学习46之第三方CocoaPods的安装和使用(通用方法)
本文主要说明CocoaPods的安装步骤.使用说明和常见的报错即解决方法. 1. CocoaPods 1> CocoaPods简介 CocoaPods是一个用来帮助我们管理第三方依赖库的工具. ...