zoukankan      html  css  js  c++  java
  • 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中实例最多的是一维数组,因为很多容器类底层是一维数组。

      

  • 相关阅读:
    最优装载问题---贪心算法
    windows 10 资源管理器多余盘符去除
    js版本排序改造vue版本
    async and await
    echarts问题
    vue兼容到IE9
    expdp/impdp 参数说明,中英对照
    MySQL ibdata1文件迁移
    Oracle AWR报告提取方法
    Vertica DBD 分析优化设计
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/4733942.html
Copyright © 2011-2022 走看看