Java Memory Management Skill List
Java内存管理小技巧:
- 尽量使用直接量
当需要使用字符串,还有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等字符。
- 使用StringBuilder和StringBuffer进行字符串连接
String代表字符序列不可辨的字符串,StringBuilder和StringBuffer都代表字符序列可变的字符串。
如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。
- 尽量释放无用对象的引用
在耗费大量内存操作之前先释放不需要的对象。比如obj=null;
- 尽量少用静态变量
最坏的清空是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。静态变量的生命周期与类相同,只要类依然被加载着,静态变量也会在内存中的Permanent代里。
- 避免在经常调用的方法,循环中创建Java对象
对象的生命周期不长,很快就要进入回收状态。
- 缓存经常使用的对象
使用HashMap进行缓存或者直接使用某些开源的缓存项目。如果使用HashMap进行缓存,程序员需要手动控制HashMap容器里的key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。OSCache,Ehcache等大多实现了FIFO,MRU等常见的缓存算法。
- 尽量不要使用finalize方法
自己调用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差。
- 考虑使用SoftReference
当程序需要创建长度很大的数组时,可以考虑使用SoftReference来白装数组元素,而不是直接让数组元素来引用对象。但是要记住软引用的不确定性,可能会自动被回收。
Java Memory Management Skill List的更多相关文章
- Java Memory Management(1)
Java Memory Management, with its built-in garbage collection, is one of the language’s finest achiev ...
- 转)Understanding Java Memory Management
Understanding Java Memory Management - IBM Java Native Interface (JNI) Objects and Code Java Native ...
- Java Memory Management
How Memory works in Java The role of the stack - Each time you call a function, Java pushed the loca ...
- Java (JVM) Memory Model – Memory Management in Java
原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...
- Understanding Java Memory Model-理解java内存模型(JVM)
from https://medium.com/platform-engineer/understanding-java-memory-model-1d0863f6d973 Understanding ...
- Java Software Engineer Skill Map
# Java Software Engineer Skill Map## Basic### Core Java- Java The Complete Reference Ninth Edition.p ...
- jmap命令(Java Memory Map)(转)
JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...
- 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 ...
- The Introduction of Java Memory Leaks
One of the most significant advantages of Java is its memory management. You simply create objects a ...
随机推荐
- HTML5 Canvas 初探
仅仅只是一个简单的hello world. js代码很简单: <!DOCTYPE HTML> <html lang="cn"> <head> & ...
- PHP之数组(遍历顺序)
作者: Laruence( ) 本文地址: http://www.laruence.com/2009/08/23/1065.html PHP的数组, 如果用foreach来访问, 遍历的顺序是固定 ...
- 浅谈三款常用软件 - Chrome、Intellij IDEA、Cygwin
作为一个每天的接触计算机的程序员,肯定也会接触形形色色的软件,不过今天在此介绍的三款软件,则是我每天都要用到的,而且我认为它们非常好用,极大的提高了我的开发效率. 1.Chrome Google的大名 ...
- 【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)
2024: [SHOI2009] 舞会 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 368 Solved: 102 Description OIto ...
- Palindromic Tree 回文自动机-回文树 例题+讲解
回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同 ...
- NOIP2017 D2T1奶酪
这题终于是正经第一题感觉了. 只需要对相交或相切的球建一条边,然后对所有与底面有交点的球连边,再对所有与顶面有交点的球连边,bfs判断上下连通性即可. #include<iostream> ...
- Java并发(十五):并发工具类——信号量Semaphore
先做总结: 1.Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 把它比作是控制流量的红绿灯,比如XX马路要 ...
- Codeforces Round #300 C. Tourist's Notes 水题
C. Tourist's Notes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pr ...
- C# 基于正则表达式的字符串验证
输入的字符串校验,是开发中经常遇到的问题,常用的办法是利用正则表达式进行判断.其特点是简洁有效. 1.正则表达基础知识 正则表达式的教程很多,这里两个基础教程: a.http://www.cnblog ...
- maven 指定工程的 jdk 版本及编译级别
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...