`
阅读更多

调优目标:

java代码调优,首先明确调优目的是什么,如下摘自网上

‍1) 运算的性能——看哪一个算法的执行性能最好?

2) 内存的分配——程序运行时需要耗费多少内存?
3) 启动的时间——程序启动需要多长时间?
4) 程序的可伸缩性——在压力负载的情况下,程序的性能如何?
5) 性能的感知——用户在什么情况下会觉得程序的性能不好?
在开始调优之前,应明确不优代码的理由。前面两项可以用一些软件进行分析。‍jprofiler是个不错的工具。JProbe也不错。Jmeter, OpenSTA,loadrunner.
调优的步骤:
一般我们提高应用程序的性能划分为以下几个步骤:
1) 明确应用程序的性能指标,怎样才符合期望的性能需求;
2) 在目标平台进行测试;
3) 如果性能已经达到性能指标就不用优化了;
4) 查找性能瓶颈;
5) 修改性能瓶颈;
6) 返回到第2步。
调优法则:

1、空间换时间法则 把常用的缓存起来

2、以时间换空间法则 比如用一些简单的数据结构进行复杂逻辑的计算。

3、循环法则

大部分稍微有点经验的人不会在同一个函数中循环两次同样的变量,但是仅限于同一个函数,假如在一个函数里调用了另外一个函数,那么就不一定了,很多人为了看似解耦的一个操作,在两个函数对同一个变量做了多次的循环。循环法则有几个比较经典细则:
第一、将代码移除循环,这是最容易想到的,当然,可以移除的条件是,每次循环都执行同样的某次操作。
第二、合并测试条件,高效的内循环应该包含尽量少的测试条件,最好只有一个,因此,程序员尽量用一些退出条件来模拟循环的其他退出条件。
第三、哨兵法则,在数据结构边界上放一个哨兵以减少测试是否已经搜索结束的开销。
第四、展开循环,展开循环可以减少修改循环下标的开销,对于避免管道延迟,减少分支以及增加指令级的并行性也有很大帮助。
第五、删除赋值,赋值的开销实际上在整个程序的执行过程中占的开销可以忽略不计,但假如你要在一个循环十万次的循环中赋值,那么开销就不能不计了,尽可能的在循环中减少赋值吧。
第六,消除无条件分支,快速的循环中不应该包含无条件分支,通过旋转循环,在底部加上一个条件分支,能够消除循环结束处的无条件分支。
第七、循环合并,如果你不小心做了傻事,那么合并两个对同一个变量循环操作吧

4、逻辑法则
利用等价的代数表达式。如果逻辑表达式的求值开销太大就将其替换为开销较小的等价代数表达式。
短路单调函数。如果我们想测试几个变量的单调非递减函数是否超过了某个特定的阈值,那么一旦达到这个阈值就不在需要计算任何变量了。
对测试机条件重新排序。在组织逻辑测试的时候,应该是降低开销的,经常成功的测试放在高开销的,很少成功的测试前面。

5、过程法则
打破函数层次。对于(非递归地)调用自身的函数,通常可以通过将其改写为内联版本并固定传入的变量来缩短其运行时间。
并行性。在底层硬件条件下,我们构建的程序应该尽可能多的挖掘并行性。

6、表达式法则
编译时初始化。在程序执行前,应该尽可能多的变量初始化。
利用等价的代数表达式。如果表达式的求值开销过大,就将其替换为开销更小的等价的代数表达式,比如换一种算法
消除公共子表达式。如果两次对同一个表达式求值,其所有变量都没有任何改动,那么我们可以用下面方法避免二次求值:存储第一次的计算结果并用其取代第二次求值。

一般应用程序的调优:

从运算性能上,如果方法运行时间过长,考虑用更优化的算法。

从内存的分配上,减少具部对象的过多创建。

考虑不同数据类型对性能的影响,如ArryList和Vector, HashMap 和HashTable, String 和StringBuffer

servlet的优化:

性能上考虑用Cache

内存上减少session的使用,一般不要把大对象放在Session里

Jsp优化:

用jsp:include进行预编译

用cahce对常用代码片段进行缓存。

数据库优化:

用数据池而不是数据连接。

时时关闭不用的资源连接。

分享到:
评论

相关推荐

    java虚拟机调优(马士兵)-课程例子程序T01-T05

    java虚拟机调优(马士兵)-课程例子程序T01-T05,java例子程序,简单的代码,省得你自己敲代码了,让你更流畅的看视频教程。

    java性能调优,带书签版

    Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层

    Java性能调优标志摘要.pdf

    像这样的日志代码会更好: if (log.isLoggable(Level.FINE)) { log.log(Level.FINE, "I am here, and the value of X is {} and Y is {}", new Object[]{calcX(), calcY()}); } 应用的性能取决于它的代码如何...

    Java高级调优.pdf

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

    JavaGC调优基础.pdf

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

    JAVA性能调优 – 概述

    代码执行时间、CPU占用时间、内存分配、磁盘吞吐量、网络吞吐量、响应时间 解决性能的2个思想 木桶原理:我们首先要解决的是系统性能最差的,就比如木桶一样,最低的一块木板,才是决定木桶装多少水 Amdahl定律:...

    java学习之JVM调优相关说明

    其实听着JVM调优这个词有些高大上,但是等你真正了解了他的内在原理后,还是很容易的。再简单 JVM调优大致可分为如下: 解决JVM运行过程中的问题(主要就是内存溢出的问题) ...架构和代码调优等级优先于JVM优化

    JAVA性能测试与调优案例

    85页pdf,讲了常见的优化,jdk,tomcat。。。 详细的JAVA性能调优方案,有助于提高代码效率

    Java生产环境下性能监控与调优详解

    基于JDK命令行的监控 基于JVisualVM的可视化监控 基于Btrace的监控调试 Tomcat性能监控与调优 Nginx性能监控与调优 JVM层GC调优 JVM字节码与java代码层调优

    Java应用性能监控和调优(思维导图)

    将视频整合成为思维导图,看着方便,节省时间。 内容包括:(1)基于JDK命令后工具的监控(2)基于Btrace的监控调试...(4)java代码层优化(5)JVM层GC调优(6)基于JVisualVM的可视化监控(7)tomcat性能监控和调优

    JVM参数调优及Java测试代码

    JVM参数调优及Java测试代码,通过调整虚拟机各种参数并进行测试和监控得到最优配置

    Java生产环境下性能监控与调优详解.7z

    Java生产环境下性能监控与调优详解 ...学会线上代码调试,Tomcat、Nginx,GC调优等手段; 读懂JVM字节码指令,分析源码背后原理,提升应对线上突发状况的能力 慕课网地址:https://coding.imooc.com/class/241.html

    java面试题优选之jvm简单调优思路

    性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标...

    Java 性能优化实战 21 讲2021年

    │ 16 案例分析:常见 Java 代码优化法则.mp4 │ 17 高级进阶:JVM 如何完成垃圾回收?.mp4 │ 18 高级进阶:JIT 如何影响 JVM 的性能?.mp4 │ 20 SpringBoot 服务性能优化.mp4 │ 21 性能优化的过程方法与...

    Java应用性能调优实践

    Java应用性能的瓶颈点非常多,比如磁盘、内存、网络I/O等系统因素,Java应用代码,JVMGC,数据库,缓存等。笔者根据个人经验,将Java性能优化分为4个层级:应用层、数据库层、框架层、JVM层,如图1所示。图1.Java...

    Java虚拟机内存测试和参数调优代码.zip

    java学习:Java虚拟机内存测试和参数调优

    JVM性能调优全套代码

    代码包含了T01到T05,下载后建议使用markdwon软件食用,谢谢大家

    编写高性能 Java 代码的最佳实践.zip_adult1nm_apm_编写高性能 Java 代码的最佳实践

    编写高性能 Java 代码的最佳实践:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。

    jvm介绍基础,构成和调优

    Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台...

Global site tag (gtag.js) - Google Analytics