【代码随想录】第2章:程序的性能分析

简介: 【代码随想录】第2章:程序的性能分析

第二章 程序的性能分析


时间复杂度


理论上是指算法的最坏情况,即上界


但平时指的是一般情况


例如:


插入排序 一般情况:O(n^2) 最好情况:O(n) 最坏情况:O(n^2)


快速排序 一般情况:O(n^2) 最好情况:O(nlogn) 最坏情况:O(n^2)


按理来说,快排时间复杂度应该是O(n^2);但是业界习惯把快排的时间复杂度默认为O(nlogn)


时间复杂度还与数据规模有关


注意:logn是忽略底数的


注意:面试不要说不会;换成,可不可以给点提示


递归算法的时间复杂度本质上要看递归的次数与每次递归中的操作次数的乘积


内存管理


程序运行时所需的内存空间分为固定部分和可变部分


固定部分的内存消耗不会随着代码运行而产生变化,而可变部分会产生变化。


固定部分:


代码区:存储二进制代码


数据区:全局变量,静态变量,常量等


可变部分:


栈区:运行方法的形参,局部变量,返回值,以及递归栈所需的空间。系统自动分配与回收


堆区:动态开辟的空间,存放new出来的对象在堆区中的真实数据。需要手动回收


固定部分占用空间固定,占用的空间非常小。运行时消耗的内存主要取决于可变部分。


堆区因为需要手动回收内存,所以容易出现内存泄漏


数据类型大小


编译器类型 char short int long float double 指针
32位编译器 1字节 2 4 4 4 8 4
64位编译器 1字节 2 4 8 4 8 8


1字节byte=8bit


内存对齐


面试问题:为什么要内存对齐


(1)平台原因:不是所有的硬件平台都能访问任意内存地址上的数据,某些平台只能在一些地址处获取特定类型的数据,否则抛出硬件异常。为了使同一个程序可以在多个平台运行,需要进行内存对其。


(2)硬件原因:进程内存对其后,CPU访问内存的速度会大大提升。


内存对其也是空间换时间


空间复杂度


程序运行时占用内存的大小;而不是程序的可执行文件的大小。


递归算法的空间复杂度=每次递归的空间复杂度×递归深度


空间换时间


是常用的优化方法


在哈希法中,数组,set,map等容器都是以空间换时间的思路。

相关文章
|
4天前
|
存储 算法 C++
程序性能分析
1. 什么是程序性能 程序性能指的是程序在执行过程中所消耗的时间和资源的多少。一个好的程序应该能够在较短的时间内完成所需的任务,并且尽可能地利用少量的资源。
27 3
|
10月前
|
监控 Java Linux
Java程序性能分析:内存
开发Java项目过程中,难免会碰到一些 性能 问题,这时候就需要一些工具,帮忙排查。本文主要介绍 JDK自带的上古神器 jstat、jmap,另简单介绍 MAT、gceasy、HeapDump 等
912 5
|
机器学习/深度学习 传感器 算法
【直扩通信】直扩通信系统信号捕获性能分析附matlab代码
【直扩通信】直扩通信系统信号捕获性能分析附matlab代码
|
搜索推荐 Java 测试技术
使用JDK自带的VisualVM进行Java程序的性能分析
使用JDK自带的VisualVM进行Java程序的性能分析
109 0
使用JDK自带的VisualVM进行Java程序的性能分析
|
搜索推荐 Java 测试技术
使用JDK自带的VisualVM进行Java程序的性能分析
使用JDK自带的VisualVM进行Java程序的性能分析
119 0
|
数据采集 算法 Java
火焰图对 Go 程序进行性能分析
火焰图对 Go 程序进行性能分析
1284 0
火焰图对 Go 程序进行性能分析
|
Linux Windows
Linux程序性能分析和火焰图
Linux程序性能分析和火焰图Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多。其中应用分析性能方面Dtrace, SystemTap, Perf_events应该算是这方面的集大成者。
2214 0
|
Java
使用VisualVM对JAVA程序进行性能分析及调优
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/80120335 http://www.
840 0
|
4天前
|
算法 Unix Linux
【C/C++ 实用工具】性能分析工具一览
【C/C++ 实用工具】性能分析工具一览
49 0
http://www.vxiaotou.com