性能优化(程序性能优化)

优化策略

不要过早进行优化???战略级的优化思路应在设计之初就建立

b30d54f606d5386b7bf7f0f998b98bebab8.jpg

战略优化思路1

cf65218beba28c514165bc508ed8e83f7dd.jpg

战略优化思路2

4ebba792ca69dc8a342946f1e16a6f4d93b.jpg

 

编码原则

代码优化的总目标

3c5550de63b8a5d74a553b36cea34509a6d.jpg

35条军规

ec8620c97deaaa064c1ff679d73935ac861.jpg

356f6903149471b7c8351f21328a81cb45e.jpg

附加

926064c786cb6e93c53425c61b3cafca4a7.jpg

 

善用工具

什么是静态代码分析
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。

1、下载 pmd-bin-6.2.0.zip
(https://github.com/pmd/pmd/releases/download/pmd_releases%2F6.2.0/pmd-bin-6.2.0.zip)
2.解压到:类似于: C:\pmd-bin-6.2.0
3.添加到环境变量Path 临时处理:SET PATH=C:\pmd-bin-6.2.0;%PATH%
4.命令行处理: pmd.bat -d c:\src -R java-basic -f text

它的能力:
可能的bug——try/catch/finally/switch 语句中返回空值。
死代码—— 未使用的局部变量、参数、私有方法。
不理想的代码—— 使用String/StringBuffer 。
过于复杂的表达式—— 没有必要使用if 语句、while 循环可以代替for 循环。
重复代码—— 复制/ 粘贴的代码引发的bug 。
PMD 集成了JDeveloper, Eclipse, JEdit, JBuilder, BlueJ, CodeGuide, NetBeans,IntelliJ IDEA, TextPad, Maven, Ant, Gel, JCreator,  以及 Emacs 

9655e1d7a3c70eb52b84612ea0baf2ef369.jpg

2. FindBug from http://findbugs.sourceforge.net
FindBug 是一个使用静态方法来查找Java 代码漏洞的程序

371cd9a3091615dbca3dc929464e114ad0e.jpg

3.Checkstyle  http://checkstyle.sourceforge.net/
Checkstyle是一款检查Java程序源代码样式的工具,它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的 样式规范和统一。Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了使用它提供的几种常见标准之外,你也可以定制自己的标准。 Checkstyle提
供了支持大多数常见IDE的插件,大部分插件中就含有最新的Checkstyle。

Windows->prefences->checkstyle:

 

异步、缓存

异步开发

定时器,使用间隔的查询,合理的脱耦
外部请求(短信等),使用线程池确保请求能够快速的响应

•1)newCachedThreadPool 是一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute() 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。
•2)newSingleThreadExecutor 创建是一个单线程池,也就是该线程池只有一个线程在工作,所有的任务是串行执行的,如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
•3)newFixedThreadPool 创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小,线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
•4)newScheduledThreadPool 创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。

缓存及工具

堆缓存,Guava Cache 、EhCache 、MapDB
堆外缓存, Guava Cache 、EhCache 、MapDB
磁盘缓存, EhCache 、MapDB
分布式缓存,Redis

Guava示例

Cache<String,String>myCache=
CacheBuilder.newBuilder().concurrencyLevel(4).expireAfterWrite(10,TimeUnit.SECONDS) .maximumSize(10000).build();

EhCache示例

CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(true);
CacheConfigurationBuilder<String,String> cacheConfig= CacheConfigurationBuilder
.newCacheConfigurationBuilder(String.class,String.class,ResourcePoolsBuilder.newResourcePoolsBuilder().heap(100,EntryUnit.ENTRIES))
.withDispatcherConcurrency(4)
.withExpiry(Expirations.timeToLiveExpiration(Duration.of(10,TimeUnit.SECONDS)));
Cache<String, String> myCache = cacheManager.createCache("myCache",cacheConfig);

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3728166/blog/2994324

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值