W2-1:Maven引入外部依赖——以GSON的使用为例
W2-2:在Maven项目中进行Junit5单元测试
W3-1:效能分析工具
- 环境:IntelliJ IDEA Ultimate 2021.3 / PyCharm-Professional-2021.3.2 - 语言:Java / Python 文章目录
系列文章目录前言一、Java
1.1 安装IntelliJ IDEA专业版1.2 通过计时量化修改程序前后的性能变化 二、Python
2.1 安装PyCharm专业版2.2 性能分析 总结
前言
火焰图(FlameGraph)的使用
一、Java 1.1 安装IntelliJ IDEA专业版
社区版有些功能用不了,所以卸载了之前的社区版,重装了一个专业版。
intellij idea ultimate的安装教程
1.2 通过计时量化修改程序前后的性能变化新建一个PA类,写入以下代码并运行程序:
import java.time.Duration;
import java.time.Instant;
public class PA {
public static int getSum(int limit){
Integer sum = 0;
for(int i = 0;i < limit; i++){
sum += i;
}
return sum;
}
public static void main(String[] args) {
Instant start = Instant.now();
getSum(80000);
Instant end = Instant.now();
System.out.println(Duration.between(start,end).toMillis());
}
}
运行结果如下:
使用Profile分析工具分析程序:
得到火焰图:
从火焰图中得知,Integer.valueOf的调用使得程序的执行效率不高。
因此,修改PA类中的Integer为int:
public static int getSum(int limit){
// Integer sum = 0;
int sum = 0;
for(int i = 0;i < limit; i++){
sum += i;
}
return sum;
}
修改后的运行结果:
从修改后的运行结果来看,代码的执行效率明显提高了许多。
这大概是因为int是Java的基本数据类型之一,可以直接存储数据,但Integer是int的包装类,是对象的引用,Integer变量必须实例化后才能使用,这对程序执行效率应该是有比较大的影响。
Java基础之int和Integer有什么区别
二、Python 2.1 安装PyCharm专业版 2.2 性能分析编写一个函数模拟grep功能,即在一个文件中搜索所有符合给定模式的行:
import re
import time
def grep(pattern, file):
with open(file, 'r') as f:
for idx, line in enumerate(f.readlines()):
pattern = re.compile(pattern)
match = pattern.search(line)
if match is not None:
print("{}: {}".format(idx, line), end="")
if __name__ == '__main__':
start = time.time()
for i in range(50000):
grep('^import', 'main.py')
print("total time is: {}".format(time.time() - start))
运行结果如下:
进行效率分析:
效率分析结果:
可以看到compile调用了95万次,运行时间占比也比较高,但是实际上这是没有必要的,因为将正则表达式转化为对象的代码只需要执行一次就够了,所以接下来修改grep函数中的代码,把不必要重复执行的代码提到遍历文件内容的循环外:
def grep(pattern, file):
with open(file, 'r') as f:
pattern = re.compile(pattern)
for idx, line in enumerate(f.readlines()):
# pattern = re.compile(pattern)
match = pattern.search(line)
if match is not None:
print("{}: {}".format(idx, line), end="")
代码修改后的运行结果:
从修改后的运行结果来看,代码的执行效率也明显提高了许多。
对Python项目进行效率分析的方式还包括命令行、利用PyCharm插件等,但因为我还没有做成功,这里就先不写了,记一个命令行的命令:
python3 -m cProfile main.py
总结 本文简单记录了在Java、Python语言环境下的一些效能分析工具的使用方法。



