java程序减少内存占用

尽量重用对象,不要循环创建对象,比如:for循环字符串拼接

容器类初始化的时候指定长度
List<String>collection=new ArrayList<String>(5);
Map<String,String>map=new HashMap<String,String>(32);

ArrayList随机遍历快,LinkedList添加删除快

集合遍历尽量减少重复计算(或者使用jdk8 Stream)
for(int i=0,len=collection.size();i<len;i++){}

使用Entry遍历Map
for(Map.Entry<String,String>entry:map.entrySet){
String key=entry.getkey();
String value=entry.getValue);

大数组复制用System.arraycopy

尽量使用基本类型而不是包装类型
Integer i = 100;
System.outprintln(i);

Integer i1 = 100;
Integer i2 = 100;
System.outprintln(i1==i2); true
Integer i3 = 100;
Integeri4=1000;
System.outprintln(i3==i4);false

因为Inteage默认取得缓存中的值,而在缓存中缓存的是-128 -> 127之间的值 所以第一个为true,第二个为false

不要手动调用System.gc()

及时消除过期对象的引用,防止内存泄露

尽量使用局部变量,减小变量的作用域

尽量使用非同步的容器ArrayList VS Vector

尽量减小同步作用范围,synchronized方法VS代码块

ThreadLocal缓存线程不安全的对象,SimpleDateFormat

尽量使用延迟加载
public class Singleton{
    private Singleton(){}
    private static class SingletonHolder{
        private static Singleton instance=new Singleton();
    }
    public static Singleton getlnstance(){
        return SingletonHolder.instance;
    }
}

尽量减少使用反射,加缓存

尽量使用连接池、线程池、对象池、缓存

及时释放资源,I/O流、Socket、数据库连接

慎用异常,不要用抛异常来表示正常的业务逻辑

String操作尽量少用正则表达式
    replace VS replaceAll (优先使用replace,replaceAll底层会使用正则)
    split

日志输出注意使用不同的级别

日志中参数拼接使用占位符
    log.info("orderld:"+orderld);不推荐
    log.info("orderld:{}",orderld);推荐

如果是单核cpu 的话  用串行垃圾收集器

使用一些新特性 设计模式

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值