StringBuffer和String需要注意的
首先,StringBuffer的toString方法和String的subString方法都是在新生成了一个新的String。
最近做的一个功能,多线程的从SQLite数据库中读取数据。将数据拼成在MySQL中可以批量执行的SQL语句,再多线程地插入到MySQL中。
SQL语句类似:Insert Into tableXXX (colum1,colum2,colum3) values (value1,value2,value3),(value1,value2,value3),(),...;
用到了StringBuffer的toString方法,这样是有潜在危险的。上面的SQL会非常的大,我这里一次从SQLite数据库中读取5000条数据。
拼成的SQL语句调用toString时,是基于原来的StringBuffer生成了一个String。原来的StringBuffer不释放时,新的String就存在引用关系。
这在大数据量、多线程的情况下将被放大。
类似的问题也存在于String的subString方法,是基于原来的String生成了一个String。速度得到了提升,但是却存在内存泄露的问题。JDK1.7中针对这个问题做出了修正。
关于内存的使用,还有一些日常需要注意的地方:
1.去掉无用的import引用,快捷键ctrl + shift + o即可。
2.去掉System.out.println
3.可以多使用一维数组,我们可以通过能内存查看工具发现,JVM中实例最多的是一维数组,因为很多容器类底层是一维数组。
StringBuffer和String需要注意的的更多相关文章
- Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...
- StringBuilder、StringBuffer和String三者的联系和区别(转)
StringBuilder.StringBuffer和String三者的联系和区别 1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对 ...
- 全面解释java中StringBuilder、StringBuffer、String类之间的关系
StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...
- Java中测试StringBuilder、StringBuffer、String在字符串拼接上的性能
应一个大量字符串拼接的任务 测试一下StringBuilder.StringBuffer.String在操作字符串拼接时候的性能 性能上理论是StringBuilder > StringBu ...
- java中StringBuffer与String、StringBuilder的区别
在java中我们经常可以看到StringBuffer和String的用法,但是我自己在使用过程中,经常会将两者弄混淆,今天我们就来了解一下两者的区别: 我们首先来看一下我们的官方API中的简单介绍: ...
- ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?
ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长 ...
- java中StringBuilder、StringBuffer、String类之间的关系
今天在CSDN的高校俱乐部里看到了"Java基础水平測试(英文)".感觉自己学了java这么久,想看下自己的java水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下 ...
- Java中 StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
- 简单的理解 StringBuffer/StringBuilder/String 的区别
StringBuffer/StringBuilder/String 的区别 这个三类之间主要的区别:运行速度,线程安全两个方面. 速度方面(快到慢): StringBuilder > Strin ...
- StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
随机推荐
- B. OR in Matrix
B. OR in Matrix time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- EMC题2
易安信笔试题分享:1 protected成员函数能被肿么调用2 “has-a” relationship是指的啥,答案有instance, reference, pointer等...3 int, c ...
- 对SVD奇异值分解的理解
首先推荐一篇博客,奇异值分解(SVD)原理详解及推导 - CSDN博客,讲解的很清楚.这里我谈谈自己的理解,方便以后回顾. 如果把向量理解为空间中的一个元素,那么矩阵可以理解为两个空间上的映射 ...
- javascript之事件监听
addEventListener是一个监听事件并处理相应的函数,用于向指定元素添加事件句柄,可使用removeEventListener()方法来移除addEventListener()方法添加的事件 ...
- 属性getter和setter
我们知道,对象属性是由名字.值和一组特性(attribute)构成的.在ECMAScript5 中,属性值可以用一个或两个方法替代,这两个方法就是getter和setter.由getter和sette ...
- 电脑如何防蹭网?使用防蹭网功能杜绝未知设备连接WiFi
发布时间:2015-09-27 15:24发布者:系统城-shaojing浏览数:733 网络越来越卡?网页打开越来越慢?如果你有以上疑问,那么就要确认自己是不是被"蹭网"了.尽管 ...
- 积分图实现均值滤波的CUDA代码
没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...
- MySQL主从复制的配置
环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205 主机名:edu-m ...
- Java数据持久层框架 MyBatis之API学习十(Logging详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- Azure Automation Deploy (ARM)
以下说明仅是对虚拟机定时开关机的一个Demo,如果读者的定时任务比较复杂,需要通过修改Runbook脚本文件实现对应的功能. 1.创建automation账户 2.添加凭据 3.添加一个runbook ...