zoukankan      html  css  js  c++  java
  • 一些性能优化的tips

    工作中积累的一些性能优化的tips,记录一下:

    1. Message的创建

    Message message = Message.obtain();  // 推荐

    Message message = new Message();  // 不推荐

    原因:message在使用完之后对调用recycle,这个操作会将message放入pool中,而obtain()方法通过从全局pool中获取已有对象创建Message,从而避免创建大量的对象

    public static Message obtain() {
        synchronized (sPoolSync) {
            if (sPool != null) {
                Message m = sPool;
                sPool = m.next;
                m.next = null;
                m.flags = 0; // clear in-use flag
                sPoolSize--;
                return m;
            }
         }
         return new Message();
    }

    2. 单例模式

    例:子线程中避免重复创建handler,可以采用单例模式,保证handler只有一个实例

    private Handler mHandler;
    
    private static class MHandler extends Handler {
        public MHandler(Looper looper) {
            super(looper);
        }
    
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    }
    
    public Handler getHandler() {
        if (mHandler == null) {
            synchonized(MyHandler.class) {
                mHandler = new MyHandler();
            }
        }
        return mHandler;    
    } 

    3. 线程池

     受限于硬件、内存和性能,我们不可能无限制的创建任意数量的线程,因为每一台机器允许的最大线程是一个有界值。

    也就是说ThreadPoolExecutor管理的线程数量是有界的。线程池就是用这些有限个数的线程,去执行提交的任务。

    使用newFixedThreadPool()可以创建固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。

    private static ExecutorService executorService = Executors.newFixedThreadPool(4);
    
    private doWork() { executorService.execute(
    new Runnable() { @Override public void run() { Message message = Message.obtain(); message.obj = onDoInBackground(); getHandler().sendMessage(message); } });
    }

    4. 

  • 相关阅读:
    H5C3--transform实现任何元素居中对齐
    H5C3--过渡transition
    H5C3--background中cover,背景样式,提升响应区域+精灵图的使用
    SpringBoot之spring.factories
    浅谈常用数据结构
    浅谈常用排序
    JAVA性能优化总结
    ORACLE10G非归档模式下RMAN异机迁库
    ORACLE10G非归档模式下异机迁库(文件迁移)
    HNOI 米特运输
  • 原文地址:https://www.cnblogs.com/nicoleTeng/p/7680504.html
Copyright © 2011-2022 走看看