博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些性能优化的tips
阅读量:4315 次
发布时间:2019-06-06

本文共 1523 字,大约阅读时间需要 5 分钟。

工作中积累的一些性能优化的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. 

转载于:https://www.cnblogs.com/nicoleTeng/p/7680504.html

你可能感兴趣的文章
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>