- 浏览: 116070 次
- 性别:
- 来自: 北京
博客专栏
-
httclient实践与源...
浏览量:0
文章分类
- 全部博客 (141)
- java设计模式 (6)
- oracle (2)
- spring (0)
- java多线程 (12)
- Effective Java 读书笔记 (5)
- mysql (11)
- 书签 (2)
- Web前端 (2)
- python (6)
- 技术博客 (6)
- 搬家 (2)
- android (1)
- java (18)
- 架构 (6)
- linux (14)
- memcached (3)
- 测试 (1)
- 网络 (1)
- 高性能WEB (2)
- http (1)
- java io (2)
- jdbc (1)
- php (5)
- css (2)
- jenkins (1)
- jfinal (1)
- maven (3)
- 算法 (3)
- 代码规范 (1)
- shell (3)
- 安全 (1)
- fastJson源码剖析 (0)
- jdk源码分析 (0)
- git (1)
- 分布式知识点 (0)
- 分布式 (1)
- tcp (1)
- cpu (2)
- 软技能 (1)
- 编译原理 (1)
- 操作系统 (1)
- java虚拟机 (1)
- 处理器 (1)
- tbschedule (1)
- 需要看的源码 (1)
- idea (1)
- zookeeper (1)
- httpclient (1)
最新评论
-
lliiqiang:
功能是关键,但是因为人的性能有限,所以性能也有可能是功能,
关于有效的性能调优的一些建议 -
huangyunbin:
呵呵,感觉和缓存很相似,已经存在的直接缓存里取,缓存没有的话加 ...
享元模式
如何做系统性能优化
性能优化的目标是什么?不外乎两个:
时间性能:减小系统执行的时间
空间性能:减小系统占用的空间
一、代码优化
做代码优化前,先了解下硬件Cache:
(1)Cache Level:通常来说L1、L2的Cache集成在CPU里,L3的Cache放在CPU外;
(2)Cache Size:它决定你能把多少东西放到Cache里,有Size就有竞争,就有替换,才有所谓优化的空间;
(3)Cache Type:I-Cache(指令),D-Cache(数据),TLB(MMU的Cache);
代码层次的优化主要从以下两个角度考虑问题:
(1)I-Cache优化:精简code path,简化调用关系,减少冗余代码等等;
(2)D-Cache优化:减少D-Cache的miss数量,增加有效数据访问。
以下是一些技巧,可供参考:
(1)Code adjacency(把相关代码放在一起)
这里有两层含义:一是相关源文件要放在一起;二是相关函数在object文件里面,也应该相邻。
这样,可执行文件被夹在到内存里时,函数位置也是相邻的,同事还符合模块化编程的要求:高内聚,低耦合。
(2)Cache line alignment(cache对齐)
对齐Cache以减少潜在的一次读写,但这可能意味着内存的浪费,需要从空间和时间两方面衡量。
(3)Branch prediction(分支预测)
如果能预测那段代码有更高的执行概率,就能减少跳转次数(调整if和else的顺序?)。
(4)Data prefetch(数据预取)
由CPU自动完成。
(5)Register parameters(寄存器参数)
(6)Lazy computation(延时计算)
最近不用的变量,不要急着去初始化(意味着可能执行复杂的构造),如果某个分支跳出了函数,这些动作就浪费了。
COW(copy-on-write)就是一种延时计算的技术。
(7)Early computation(提前计算)
有些变量,计算一次就够了,任何加减乘除都会消耗CPU指令,尽量使用常数,而不是24*60*60来表示一天的秒数。
(8)Inline(内联函数)
(9)Macro(宏定义)
(10)Allocation on stack(局部变量)
避免在栈上申请大数组,其初始化和销毁的代价很高。
(11)Per-cpu data structure(非共享数据结构)
避免共享量的锁,在thread local里,多核情况下使用局部变量会带来好处。
(12)Reduce call path or call trace(减少函数调用层次)
(13)Read&write split(读写分离)
(14)Recude duplicated code(减少冗余代码)
其中,(1)(6)(7)(8)(9)(10)(11)(12)(14)这些优化方式最为常见。
二、工具优化
“工欲善其事
性能优化的目标是什么?不外乎两个:
时间性能:减小系统执行的时间
空间性能:减小系统占用的空间
一、代码优化
做代码优化前,先了解下硬件Cache:
(1)Cache Level:通常来说L1、L2的Cache集成在CPU里,L3的Cache放在CPU外;
(2)Cache Size:它决定你能把多少东西放到Cache里,有Size就有竞争,就有替换,才有所谓优化的空间;
(3)Cache Type:I-Cache(指令),D-Cache(数据),TLB(MMU的Cache);
代码层次的优化主要从以下两个角度考虑问题:
(1)I-Cache优化:精简code path,简化调用关系,减少冗余代码等等;
(2)D-Cache优化:减少D-Cache的miss数量,增加有效数据访问。
以下是一些技巧,可供参考:
(1)Code adjacency(把相关代码放在一起)
这里有两层含义:一是相关源文件要放在一起;二是相关函数在object文件里面,也应该相邻。
这样,可执行文件被夹在到内存里时,函数位置也是相邻的,同事还符合模块化编程的要求:高内聚,低耦合。
(2)Cache line alignment(cache对齐)
对齐Cache以减少潜在的一次读写,但这可能意味着内存的浪费,需要从空间和时间两方面衡量。
(3)Branch prediction(分支预测)
如果能预测那段代码有更高的执行概率,就能减少跳转次数(调整if和else的顺序?)。
(4)Data prefetch(数据预取)
由CPU自动完成。
(5)Register parameters(寄存器参数)
(6)Lazy computation(延时计算)
最近不用的变量,不要急着去初始化(意味着可能执行复杂的构造),如果某个分支跳出了函数,这些动作就浪费了。
COW(copy-on-write)就是一种延时计算的技术。
(7)Early computation(提前计算)
有些变量,计算一次就够了,任何加减乘除都会消耗CPU指令,尽量使用常数,而不是24*60*60来表示一天的秒数。
(8)Inline(内联函数)
(9)Macro(宏定义)
(10)Allocation on stack(局部变量)
避免在栈上申请大数组,其初始化和销毁的代价很高。
(11)Per-cpu data structure(非共享数据结构)
避免共享量的锁,在thread local里,多核情况下使用局部变量会带来好处。
(12)Reduce call path or call trace(减少函数调用层次)
(13)Read&write split(读写分离)
(14)Recude duplicated code(减少冗余代码)
其中,(1)(6)(7)(8)(9)(10)(11)(12)(14)这些优化方式最为常见。
二、工具优化
“工欲善其事
发表评论
-
java Unsafe类
2018-03-20 20:55 389http://ifeve.com/sun-misc-unsaf ... -
java 之DelayQueue实际运用示例
2016-06-15 17:09 481http://www.cnblogs.com/sunzhenc ... -
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
2015-07-03 19:11 661window下在同一台机器上安装多个版本jdk,修改环境变量不 ... -
java实现base64
2015-04-29 15:30 500BASE64和其他相似的编码算法通常用于转换二进制数据为文本数 ... -
最全的静态网站生成器(开源项目)
2015-04-26 00:53 498最全的静态网站生成器(开源项目) http://www.ite ... -
关于有效的性能调优的一些建议
2015-04-19 12:09 690关于有效的性能调优的 ... -
java 代码时间和内存测试
2015-04-18 22:26 609// 测试用了多少内存 import java.util ... -
系统打印日志的10条建议(翻译)
2015-04-14 14:33 459http://uptoknow.iteye.com/blog/ ... -
Java编程最差实践
2015-04-14 14:32 372http://macrochen.iteye.com/blog ... -
几行代码写RPC
2015-04-13 22:55 436转自梁飞博客 package com.alibaba.stud ... -
java 关于for和foreach,兼顾效率与安全
2014-12-05 14:46 17348关于for和foreach,兼顾效率与安全 对于数组的访问,是 ... -
java 关于for循环
2014-12-05 14:41 525关于使用for循环 有人喜欢使用for作类似while的循环: ... -
会话COOKIE? 持久COOKIE?
2014-11-07 00:15 549关于COOKIE和SESSION的关系,一直没搞清楚。网上一搜 ... -
内存cookie与持久cookie
2014-11-05 22:27 547cookie分两种 :会话cookie(session coo ... -
Java字符串底层理解
2014-09-11 15:11 7031. 栈(stack)与堆(heap)都是 ... -
java 字符串相加
2014-09-10 14:01 1480字符串相加。string + (原作者: 火龙果) 为了加 ... -
java虚拟机垃圾回收深入理解
2013-03-18 17:52 883JAVA学习之4 引用与JVM 1.java内存管理分为内存分 ...
相关推荐
龙哥首写模块,第一次写的模块,还是很好用的
龙哥2013最新制作电脑病毒第三课免费教程 走过的朋友千万不要错过 OK
强大的ip代理软件 。无毒 无广告。
四阶龙哥库塔法 Matlab函数代码 标准可用
龙哥库塔法实现短波射线追踪 用于电离层短波通信
c++,matlab, 龙格库塔算法,数值分析,可移植性,工程数值
运用C++建立龙哥库塔的数值解代码,可以很好的求解微分方程
四阶龙哥库塔法解非线性方程组,绝对的好资料
随机共振的MATLAB源程序,运用龙哥库塔算法进行的仿真
龙哥库塔方法,求解微分方程,具有二阶代数精度,在本例中的精度已经相当不错了。
龙哥库塔发,欧拉发是数值分析的一个分析方法。此程序是用来解决一个计算题的。
简单的图片上传--龙哥
龙哥的Java基础笔记大全,可以说是史上最全最生动易懂,不信你就自己来看~
跟“龙哥”学C语言编程.docx
这可是清晰版啊!!!《C语言编程》张小潘译 原作者:Stephen G.Kochan(斯蒂芬....本书是一本完完整整介绍C语言基础的书籍。本书最大的特色在于举例精妙,讲解生动。通过一系列实际情形的需求,引入关于程序设计的基本...
c#实现求解白拉修斯方程。程序使用文件流,四阶龙哥库塔法.zip
采用四级四阶龙哥库塔算法求解常微分方程组
各种数学数值分析算法,杜氏分析法,迭代法,龙哥库塔法,二分法等大量算法
腾讯编程马拉松考试题目-马虎的龙哥、照片评级、图形匹配
龙格库塔法求解齿轮系统动力学响应主程序,可以实现系统的相位图,位移,等的求解,是学习齿轮系统动力学的参考资料,里面有matlab程序