【藏经阁一起读(40)】读《Java应用提速(速度与激情)》,你有哪些心得?
读完了整部书,发现以前都忽视了这一块:“从java应用的一些基础设施和工具层面着手,提速java应用”,或许也是由于一直没接触过这么庞大的应用吧。
对于小应用而言,简单的优化下代码逻辑,提高部分功能的执行效率,是我们会关注的重点,我们基本不会从工具层面、从基础设施层面来考虑速度上面的问题,因为它们对我们项目几乎没影响,或者说不被重视,也或者说还不至于让我们能参与到这等程度,能实现好项目功能,让业务顺利执行就够了。
从这本书中,开阔了我认知,我了解到了提速的新方向,也汇总了下提速的不同手段:
优化算法:算法要和使用的场景结合起来,没有最好的,只有最适用的。例如结合 maven 的版本仲裁机制,从深度优先算法(DF)改到广度优先算法(BF)
利用索引:索引是为了提高查询效率的,像字典的目录一样,所以对于检索查询的场景去做优化,往往要用到索引。例如ClassLoader提速一章:
优化的方案可以简单的用一句话概括,就是给URLClassLoader的资源查找加索引。
利用缓存:将会重复做、重复使用且大部分情况下内容都一致的“东西”缓存起来,使重复做的时候用更少的时间来完成。例如maven依赖树的缓存,这里也包含了增量的意思,如文中所写
增量是与缓存息息相关的,增量的实现就是用缓存
增量更新:特别再提一下增量,对于java应用部署war包之类的,有直观的感触,一个几G的文件每次更新可能只有几M的变化,但要重新全部传输一遍,浪费太多时间,只增量更新就快多了
并发处理:在保证安全的基础上,利用并发,同时处理多个请求,或者将复杂的操作分成多个线程同时进行。例如maven提速中的分布式并发构建、增大下载并发数、扫包算法并发扫jar包
调整逻辑:有的时候遇到的场景是,某段逻辑放在这里是不合适的,想办法提高它的效率,可能难以做到的,这个时候我们需要转变思路,考虑这段逻辑的主体执行者该是谁了。例如maven提速中【SNAPSHOT 版本号缓存】,在mave中检测SNAPSHOT时要多次请求maven仓库,SNAPSHOT是否有更新maven仓库是最先知道的,这个时候应该是将这个更新的通知接收,然后更新我们这边缓存的版本号信息,我们就知道是否版本号有变化,而不是每次都主动的去查询是否有更新。【另:在多个系统合作的时候,往往也碰到类似的场景,这个时候可能无力达成这个逻辑调整,对端系统就是不愿意去做这个事情,只能在我方系统去做,这样就没办法了~~】
环节消除:去除一些可以被简化掉的环节,使整个过程还能顺利运作,这样节省的就是整个该环节的耗时了。例如maven提速中直接消除字节码转机器码的环节:
maven 也是 Java 程序,运行时要将字节码转成机器码,而这转化有时间开销……用 JIT 直接将 maven 程序编译成机器码,同时 mvn 在构建完成后,不退出,常驻进程,当有新构建任务来时,直接调用 mvn 进程。
总的来说,我从这本书中,学到的多是一些理念上的思想,丰富认知,在实操上面并未涉及到多少。
另:【从盲侠说起】一节第一行多一个【有】字。
赞0
踩0