前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >影响性能的重要问题

影响性能的重要问题

作者头像
dys
发布2018-04-03 17:17:26
5910
发布2018-04-03 17:17:26
举报
文章被收录于专栏:性能与架构性能与架构

在 2016 QCon 大会上,技术大牛 Martin Thompson(伦敦金融衍生品交易所LMAX的创始人兼CTO)进行了技术分享,主题是“影响性能的前10大错误”,内容较多,下面只介绍下 top 1,2

有兴趣的可以看下原文,地址

http://www.infoq.com/articles/top-10-performance-mistakes

1. Logging

Thompson认为logging是最容易影响性能的,他给了一个图表,描述了logging线程的增加与时间耗费的关系

从图中可以看出,随着用于logging的线程增加,消耗的时间随之线性增长

Thompson说测试了绝大多数的日志系统,画出来的图都是这样的,Loggers是系统性能的重要瓶颈,建议使用异步logger

有很多错误日志信息是重复的,Thompson建议只在第一次发生时记录日志,以后重复出现时,增加计时器即可

2. API Design

Thompson 认为在性能方面,很多API接口的设计都很糟糕

例如这个接口

public String[] split(String regex)

这个设计有什么问题呢?

首先,返回类型是一个固定长度的数组,那么在方法实现中就需要使用一个临时结构体,用于copy数据到数组

另外,调用者调用此接口后,得到一个数组,如果想要对结果做一些操作,如排序,他就不得不把数组中的数据copy到另一个结构体中

有什么更好的设计方法呢?

只需要简单的修改一下返回值的类型,不使用固定数组,而是返回一个迭代器,就可以避免第1个问题,如

public Iterable split(String regex)

如果想进一步提高性能,可以取消返回值,增加一个参数,让调用者自己提供存放结果数据的结构体,如

public void split (String regex, Collection<String> dst)

这样,如果调用者想去掉重复的数据,就可以使用SET,如果想要一个有序列表,就可以使用TreeMap

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档