这些年,随着CPU、内存、I/O 设备都在不断迭代,不断朝着更快的方向努力。在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU 和内存的速度差异可以形象地描述为:CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间)。内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。
我们都知道的是,程序里大部分语句都要访问内存,有些还要访问 I/O,根据木桶理论(一只水桶能装多少水取决于它最短的那块木板),程序整体的性能取决于最慢的操作——读写 I/O 设备,也就是说单方面提高 CPU 性能是无效的。
为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为:
现代计算机在CPU 增加了缓存,以均衡与内存的速度差异
操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异
编译程序优化指令执行次序,使得缓存能够得到更加合理地利用
由此可见,虽然现在我们几乎所有的程序都默默地享受着这些成果,但是实际应用程序设计和开发过程中,还是有很多诡异问题困扰着我们。
基本概述
每当提起Java性能优化,你是否有想过,真正需要我们优化的是什么?或者说,指导我们优化的方向和目标是否明确?甚至说,我们所做的一切,是否已经达到我们的期望了呢?接下来,我们来详细探讨一下。
性能优化根据优化的方向和目标来说,大致可以分为业务优化和技术优化。业务优化产生的影响是非常巨大的,一般最常见的就是业务需求变更和业务场景适配等,当然这是产品和项目管理的工作范畴。而对于我们开发人员来说,我们需要关注的和直接与我们相关的,主要是通过一系列的技术手段,来完成我们对既定目标的技术优化。其中,从技术手段方向来看,技术优化主要可以从复用优化,结果集合优化,高效实现优化,算法优化,计算优化,资源冲突优化和JVM优化等七个方面着手。
一般来说,技术优化基本都集中在计算机资源和存储资源的规划上,最直接的就是对于服务器和业务应用程序相关的资源做具体的分析,在照顾性能的前提下,同时也兼顾业务需求的要求,从而达到资源利用最优的状态。一味地强调利用空间换时间的方式,只看计算速度,不考虑复杂性和空间的问题,确实有点不可取。特别是在云原生时代下和无服务时代,虽然模糊和减少了开发对这些问题的距离,但是我们更加需要了解和关注这些问题的实质。
特别指出的是,JVM优化。由于使用Java编写的应用程序,本身Java是运行在JVM虚拟机上的,这就意味着它会受到JVM的制约。对于JVM虚拟机的优化。一定程度上会提升Java应用程序的性能。如果参数配置不当,导致内存溢出(OOM异常)等问题,甚至引发比这更严重的后果。
由此可见,正确认识和掌握JVM结构相关知识,对于我们何尝不是一个进阶的技术方向。当然,JVM虚拟机这一部分的内容,相对编写Java程序来说,更加比较枯燥无味,概念比较多且抽象,需要我们要有更多的耐心和细心。我们都知道,一颗不浮躁的心,做任何事都会收获不一样的精彩。
更多关于“java培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。