阿里P8架构师详解Java性能调优策略
2020-12-13 03:36
标签:高性能 ring 多次 性能分析 因此 测试报告 intern 观察 响应 微基准性能测试 ①. 在Java编程语言和环境中,.java文件编译成.class文件后,需要通过解析器将字节码转换成本地机器码才能运行 ②. 为了节约内存和执行效率,代码在最初被执行时,解析器会率先解析执行这段代码 ③. 随着代码被执行的次数增加,当JVM发现某个方法或代码块运行得很频繁时,就会把这些代码认定为热点代码 ④. 因此在刚开始运行的阶段,JVM会花费很长的时间来全面优化代码,后面就能以最高性能运行了 ①. 不稳定因素:机器其他进程的影响、网络波动、JVM GC的不确定性 ①. 任意一个JVM都拥有整个系统的资源使用权 1.完成性能测试之后,需要输出一份性能测试报告,测试结果需要包括 2.通过观察性能指标,可以发现性能瓶颈,再通过自下而上的方式分析查找问题 3.分析查找性能问题可以采用自下而上的方式,而解决性能问题,一般采用自上而下的方式逐级优化 思路:业务调优 -> 编程调优 -> 系统调优 1.应用层的问题代码往往会因为耗尽系统资源而暴露出来 2.例如某段代码导致内存溢出,这往往是将JVM的内存耗尽了 3.还有一些非问题代码导致的性能问题,比较难以发现 1.面向对象有很多设计模式,可以用于优化业务层以及中间件层的代码设计,进而达到精简代码和提高整体性能的目的 2.例如单例模式在频繁创建对象的场景中,可以共享一个对象,减少频繁创建和销毁对象带来的性能开销 1.合适的算法可以大大提升系统性能 2.例如在不同的场景中,使用合适的查找算法可以降低时间复杂度 1.如果系统对查询的速度没有很高的要求,但对存储空间要求苛刻,可以考虑用时间换空间 2.例如String的intern方法,可以将重复率比较高的数据存储在常量池,重复使用相同的对象,大大节省内存空间 1.使用存储空间来提升访问速度 1.根据业务场景,合理地设置JVM的内存空间和GC算法 1.性能优化策略,主要为了提高系统性能,而兜底策略,主要为了确保系统的稳定性 2.限流 3.智能横向扩容 4.提前扩容 5.Kubernetes可以实现智能横向扩容和提前扩容Docker服务 阿里P8架构师详解Java性能调优策略 标签:高性能 ring 多次 性能分析 因此 测试报告 intern 观察 响应 原文地址:https://blog.51cto.com/14409778/2412948一、性能测试
Ⅰ.测试方法
Ⅱ.干扰因素
1.热身问题
2. 测试结果不稳定
①. 解决方案:通过多次测试,将测试结果求平均,只要能保证平均值在一个合理的范围之内,并且波动不大即可3. 多JVM
②. 如果一台机器上只部署单独的一个JVM,在做性能测试时,测试结果会很好,但一台机器上有多个JVM,则不一定
③. 尽量避免线程环境一台机器部署多个JVM二、性能分析
三、性能调优
Ⅰ. 优化代码
Ⅱ. 优化设计
Ⅲ. 优化算法
Ⅳ. 时间换空间
Ⅴ. 空间换时间
2.例如MySQL的分库分表Ⅵ. 参数调优
2.另外,合理地设置Web容器的线程池大小和Linux操作系统的内核参数四、兜底策略
五、总结
写在最后
上一篇:windowsphone 中CollectionViewSource和ObservableCollection的使用
下一篇:[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序处理并发