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 ...
随机推荐
- 8611 大牛之路I
时间限制:500MS 内存限制:1000K 提交次数:157 通过次数:62 题型: 编程题 语言: C++;C Description 要成为ACM大牛,要掌握很多必需的知识点.某些知识点可以 ...
- linux(centos6)搭建ftp服务器
前提 ssh服务已经开启,关闭防火墙,主机和虚拟机能ping通 查看ssh和防火墙的状态 service sshd status service iptables status 开启ssh服务 ser ...
- iOS实现简书的账号识别方式(正则表达式)
通过简书iOS客户端登录,我们会看到请输入手机号或者邮箱登录,但是我们随机输入1234567的时候,便会弹出手机格式不正确,同样也会识别我们的邮箱格式,那么我们在项目中怎么实现这种判断呢? 0E471 ...
- 每天一个linux命令--退出<符号
linux出现如下情况: [calendar@test190 logs]$ [calendar@test190 logs]$ [calendar@test190 logs]$ [calendar@te ...
- java基础-控制流语句
浏览以下内容前,请点击并阅读 声明 一般情况下,代码的执行按照从上到下的顺序,然而通过加入一些判断,循环和跳转语句,你可以有条件地执行特定的语句. 接下来分三部分介绍Java的控制流语句,他们是判断语 ...
- 编程思想┊从实例谈面向对象编程(OOP)、工厂模式和重构
有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一 ...
- linux ubuntu的root密码
安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...
- Windows下查看端口冲突的进程
在tomcat部署中,经常遇到80端口被占用,下面总结了两条查看端口进程的方法. 查看端口方法: netstat -aon|findstr "80" 如图,使用80端口的进程列 ...
- Codeforces Round #249 (Div. 2) B. Pasha Maximizes
看到题目的时候,以为类似插入排序,比较第i个元素和第i-1个元素, 如果第i个元素比第i-1个元素小,则不交换 如果第i个元素比第i-1个元素大,则交换第i个元素和第i-1个元素 继续比较第i-1个元 ...
- cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构
郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 最近 ...