今天看一本书,书上提到了内存泄露,后面也提到了内存管理的小技巧,在这里记下来,以免以后忘记。

1.尽量使用直接量。比如:String str = "I can play!";而不是 String str = new String("I can play!");注意,此处并不是说后一种不对,只是相对前一种来说,后面一种方式在内存中需要创建两次对象,一次在字符创缓存池,一次是String对象底层的char[]数组。而第一种只需一次。

2.使用String builder和String Buffer来进行字符串连接。String代表字符序列不可改变的字符串,String Builder和String Buffer代表字符序列可以改变的字符串。使用String进行字符串连接时程序会产生大量的临时字符串,会消耗系统内存。而String buffer与String builder在使用方法上几无区别,区别在于String Buffer是类似于hashtable的线程安全的,里面有一些带同步锁的方法,而String builder是类似于hashmap的线程不安全的,在单线程模式中速度较快。

3.尽早释放无用对象的引用。例如:

public void info(){

  Object o = new Object();

  System.out.print(o.toString);

  System.out.print(o.hashcode);

  o = null;

  //执行耗时、耗内存操作或者调用耗时耗内存的方法

}

4.尽量少用静态变量。jvm会将程序用static修饰的类的信息存入Permanent代,这将使得带有静态属性的类一直有效,从而使得内存空间无法回收。

5.避免在经常调用的方法、循环中创建java对象。因为系统会不断的为创建的这些对象分配内存空间,执行初始化操作,程序的性能会受到巨大的影响。

6.缓存经常使用的对象。有两种方式:使用hashmap进行缓存,使用某些开源的缓存项目例如Oscache、Ehcache。

7.尽量不要使用finalize() 方法。

8.考虑使用SoftReference软引用。

转载于:https://www.cnblogs.com/zzcc/p/3745878.html

java--内存管理的几点小技巧相关推荐

  1. Java内存管理的9个小技巧

    1.最基本的建议是尽早释放无用对象的引用.如:  ...  A a = new A();  //应用a对象  a = null; //当使用对象a之后主动将其设置为空  -.  注:如果a 是方法的返 ...

  2. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

  3. Java 中代码优化的 30 个小技巧(中)

    11 位运算效率更高 如果你读过 JDK 的源码,比如 ThreadLocal.HashMap 等类,你就会发现,它们的底层都用了位运算. 为什么开发 JDK 的大神们,都喜欢用位运算? 答:因为位运 ...

  4. Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...

  5. 聊聊我们Java中代码优化的30个小技巧

    今天我们一起聊聊Java中代码优化的30个小技巧,希望会对你有所帮助. 1.用String.format拼接字符串 不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况. 比如现在有个 ...

  6. Java中代码优化的30个小技巧

    1.用String.format拼接字符串 String.format方法拼接url请求参数,日志打印等字符串. 但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用 ...

  7. Java内存管理-一文掌握虚拟机创建对象的秘密(九)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...

  8. java基础(一):谈谈java内存管理与垃圾回收机制

    看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...

  9. Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域 ...

  10. Java内存管理:深入Java内存区域

    Java内存管理:深入Java内存区域 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述 ...

最新文章

  1. Python-字符串的常用方法
  2. 10年老分析师最终抛弃Excel,它不是最好的数据分析工具
  3. launchMode的几种模式
  4. 北理工远程教育在线作业统考计算机,北理工19春《操作系统》在线作业【标准答案】...
  5. uml的图与代码的转换——类图
  6. 已解决:TeamViewer使用的设备数量上限
  7. 出现画面抖动_手机拍照时模糊,抖动?赶紧来拯救你的拍摄技术吧!
  8. CCNP实战教程之 OSPF中为什么将环回口通告为主机路由?
  9. 我能想到最赛博朋克的事,就是为全世界的工程师雕刻一尊“虚拟分身”
  10. 《3D数学基础》1.7 向量的向量积
  11. MySQL - 解除安全模式
  12. Python3---有关日期的处理---最近自然周最近自然月最近一周最近一月---dateutil模块
  13. 怎样在oblog中添加音乐播放器
  14. xctf攻防世界 MISC高手进阶区 saleae
  15. ceph存储 pg归置组处于stuck以及degraded状态解决方案
  16. OSError: [WinError 87] 参数错误。
  17. [易飞]关于易飞ERP进货单审核过程的总结
  18. tracker服务器
  19. 基于阿米巴经营模式的电商平台研发
  20. .net Entity Framework

热门文章

  1. 不止面试题,笔记源码统统都有
  2. C++中的sta::atomic<bool>和auto类型
  3. 【Ubuntu入门到精通系列讲解】系统信息相关命令
  4. python【力扣LeetCode算法题库】912- 排序数组
  5. 机器学习中训练集、验证集和测试集的区别
  6. 绘制E—R图(详细)
  7. uwsgi模式_nginx+uwsgi 和nginx+gunicorn区别、如何部署
  8. python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
  9. 宁波网络推广浅析网站在优化关键词需注意哪些事项?
  10. hashmap转红黑树的阈值为8_面试必问的HashMap,一次彻底帮你搞定HashMap源码