Java内存管理小技巧:

  1. 尽量使用直接量

当需要使用字符串,还有Byte,Short,Integer,Long,Float,Double,Boolean,Character包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。

String str=”hello”; 这种方法会创建一个”hello”字符串,而且JVM的字符串缓存池还会缓存这个字符串。String str = new String(“hello”);创建了一个缓存在字符串缓存池中的”help”字符串。除此之外str所引用的String对象底层还包含一个char[]数组,这个char[]数组里依次存放了h,e,l,l,o等字符。

  1. 使用StringBuilder和StringBuffer进行字符串连接

String代表字符序列不可辨的字符串,StringBuilder和StringBuffer都代表字符序列可变的字符串。

如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。

  1. 尽量释放无用对象的引用

在耗费大量内存操作之前先释放不需要的对象。比如obj=null;

  1. 尽量少用静态变量

最坏的清空是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。静态变量的生命周期与类相同,只要类依然被加载着,静态变量也会在内存中的Permanent代里。

  1. 避免在经常调用的方法,循环中创建Java对象

对象的生命周期不长,很快就要进入回收状态。

  1. 缓存经常使用的对象

使用HashMap进行缓存或者直接使用某些开源的缓存项目。如果使用HashMap进行缓存,程序员需要手动控制HashMap容器里的key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。OSCache,Ehcache等大多实现了FIFO,MRU等常见的缓存算法。

  1. 尽量不要使用finalize方法

自己调用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差。

  1. 考虑使用SoftReference

当程序需要创建长度很大的数组时,可以考虑使用SoftReference来白装数组元素,而不是直接让数组元素来引用对象。但是要记住软引用的不确定性,可能会自动被回收。

Java Memory Management Skill List的更多相关文章

  1. Java Memory Management(1)

    Java Memory Management, with its built-in garbage collection, is one of the language’s finest achiev ...

  2. 转)Understanding Java Memory Management

    Understanding Java Memory Management - IBM Java Native Interface (JNI) Objects and Code Java Native ...

  3. Java Memory Management

    How Memory works in Java The role of the stack - Each time you call a function, Java pushed the loca ...

  4. Java (JVM) Memory Model – Memory Management in Java

    原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...

  5. Understanding Java Memory Model-理解java内存模型(JVM)

    from https://medium.com/platform-engineer/understanding-java-memory-model-1d0863f6d973 Understanding ...

  6. Java Software Engineer Skill Map

    # Java Software Engineer Skill Map## Basic### Core Java- Java The Complete Reference Ninth Edition.p ...

  7. jmap命令(Java Memory Map)(转)

    JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...

  8. Android内存管理(1)WRANGLING DALVIK: MEMORY MANAGEMENT IN ANDROID PART 1

    from : http://www.raizlabs.com/dev/2014/03/wrangling-dalvik-memory-management-in-android-part-1-of-2 ...

  9. The Introduction of Java Memory Leaks

    One of the most significant advantages of Java is its memory management. You simply create objects a ...

随机推荐

  1. js监测设备类型【安卓,ios,苹果微信,电脑pc】

    话不多说上代码: 1.判断是不是微信 function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/Mic ...

  2. 表A中一条记录的两个字段都对应于表B的同一个字段 如何查询?SQL, thinkphp[5]

    表  A=approval_order, B=admin,  表A中technician_username, salesman_username 都是id号,中文名保存在admin表的nickname ...

  3. elementUI 学习入门之 input 输入框

    基础用法 <el-input v-model="input1" palcehoder="请输入"></el-input> var Mai ...

  4. CodeForces 803A Maximal Binary Matrix

    枚举. 枚举对角线上放多少个$1$,剩余的贪心放,更新答案. #include <iostream> #include <cstdio> #include <cstrin ...

  5. Python并发编程-进程间数据共享

    Manager中进程数据不安全 通过加锁解决 from multiprocessing import Manager,Process,Lock def main(dic,lock): lock.acq ...

  6. HDU 6060 RXD and dividing(dfs 思维)

    RXD and dividing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  7. 使用matplotlib绘图(三)之饼图

    # 使用matplotlib绘制饼图 import numpy as np import matplotlib.pyplot as plt # 设置全局字体 plt.rcParams['font.sa ...

  8. Redis_常用5大数据类型简介

    前面介绍了一些redis的的基本配置,以及安装,本文继续学习redis的五大数据类型. 一.Redis的五大数据类型 String(字符串).List(列表).Set(集合).Hash(哈希,类似ja ...

  9. Maven安装详细图文教程

    1.安装maven前需要先安装java,并设置JAVA_HOME环境变量.(详见jdk安装教程) 2.  将apache-maven-3.0.5-bin.zip放到d:\teamwork(自定义目录) ...

  10. WinDbg-如何抓取dump文件

    这要分两种情况:第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后 ...