`
yangtsefisher
  • 浏览: 27001 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java性能优化之实战算法[2]

    博客分类:
  • Java
阅读更多

——当你拿着一把锤子的时候,所有的东西看起来都像钉子。
——当你看到钉子的时候,手上拿着的东西看起来就像一把锤子。


性能优化有时候很像玩一个策略游戏(免费),对手不是计算机,程序员,设计架构,编译器,控制流,而是时间,内存,竞争条件,预算限制等等。有三个资源限制几乎所有应用都会面临:1.CPU速度和有效性2.系统内存3.磁盘I/O。

性能分析的关键是找到瓶颈所在,符合二八原理的是,计算机通常会将80%的时间花在20%的程序上,所以找出这20%的瓶颈很重要,这就是我上篇中所说的,为什么在优化之前一定要分析,不要相当然。我从二八原理学到的就是要统筹分析,使做事效率最优化,这个优化跟我们标题中提到Java性能优化道理上都是一样的。即应该把80%的时间花在造成问题的80%原因上面。呵呵,绕口吧。

比如,我在分析的时候,就发现了这么一个瓶颈,一个微不足道的步骤却消耗了大部分CPU资源,某些情况下CPU花了它96%的时间来处理它。

简化模型,描述起来,就是:

一维数组,每个元素都有保持它是第几个的一个index, 从头到尾插入元素,已有的元素的index需要做出调整,以保持一致性(即:array[i].index = i)。按照我们现在的算法,是每插入一条,其后面的每个元素记录的索引都要做出相应调整。简单估计一下,假设输入规模是N,大概需要O(N^2)的时间,当只有两三万的时候还好,大到8万就显得慢了(是两万时的16倍)。

这个问题本质上是个算法问题,就是怎么样把O(N^2)降到O(N)或者更低的问题,这样便可以大大的提高CPU效率和速度。

开始之前,我想了两种方法:
方法一:绕过这个问题,想办法直接计算出某元素在插入后的值,或者等到多次插入后,一起调整。
方法二:直接解决这个问题,不用字段index保存这个问题,想办法借助类似C++的指针地址,和数组地址来计算index。

对于方法二,需要借助语言特性,因为Java是没有办法取到对象值实例的地址,估计C++也悬,这条途径的复杂度和陷阱太多了,所以很快被抛弃了。
思考方法一:其实对于插入记录整个这个过程,许多记录被调整了多次,其实中间的这些调整是不用关心的,我们只需要知道最后状态是在某个位置就行了。因此,我们想要直接计算插入后的位置,让每条记录只进行一次索引调整。

最后的解决办法就是,首先将插入的记录排序,即从前往后插入,然后要做到取消中间的这些调整,使每条记录只调整一次,对于每个记录来说,只要用一个临时变量来记录它的前面已经插入的多少条记录,从前往后调整,轮到某条记录时,便可以计算出位置索引index的值,保证初始状态和插入结束后状态的一致性。

这个问题看起来是不是似乎很简单?但是,实际情况中的问题要复杂的多,比如,有可能这个插入是在某个大的循环中进行的,也可能在插入的同时,程序需要对这个数组中的记录做操作,可能还是个二维数组等等。关键的是,你需要做出某些努力,重构简化模型,然后抽象出模型,找出问题的本质。

原来的做法,每插入一次就调整一次为的是保证插入过程中每个记录状态都要保持一致性,这个要求太高了,所以导致了O(N^2)的高代价。真正的要求没有那么高,我们只需要开始和结束两个状态的一致性就行了,而这只需要N(O)就可以做到,这个代价就低了。这样这个瓶颈就通过算法来解决了,可以看出算法在性能优化中还是很重要的。

分享到:
评论
1 楼 yangtsefisher 2009-05-20  
MakeLove 写道
居然没看懂


名字不错哈。。。
难道是我表达有问题?

相关推荐

    Java性能优化实战视频全集

    ### Java性能优化实战知识点概述 #### 一、理论分析篇 **1.1 性能优化的衡量指标及注意事项** - **衡量指标**: 包括响应时间、吞吐量、资源利用率等。 - **注意事项**: 在进行性能优化时,需确保优化方案不会引入...

    Java 性能优化实战 21 讲

    在Java性能优化实战的21讲中,涵盖了Java开发中至关重要的性能调优技术,旨在提升应用程序的效率、稳定性和可扩展性。以下是对这些关键知识点的详细解析: 1. **JVM内存模型**:理解Java虚拟机(JVM)的内存结构是...

    《Java程序性能优化》(葛一鸣)PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于Java程序性能优化的书籍,作者是葛一鸣,并提供了该书PDF版本的下载链接。虽然没有具体的书籍内容,但基于标题、描述以及通常这类书籍会涉及的主题,我们可以总结出...

    阿里+Java+开发手册、阿里巴巴Java性能调优实战

    另一方面,《阿里巴巴Java性能调优实战》华山版专注于深入探讨Java应用的性能优化。本书不仅讲解了性能优化的理论知识,还提供了大量的实战案例和分析,帮助开发者快速定位性能瓶颈并给出有效的优化策略。在JVM内存...

    阿里巴巴Java性能调优实战(2021华山版)

    专栏分为七大模块,从上到下依次详解 Java 应用服务的每一层优化实战。 模块一:概述 模块一主要讲解性能调优的标准,包括性能调优标准和调优过程标准。性能调优标准告诉开发者可以通过哪些参数去衡量系统性能,而...

    阿里JAVA性能优化实战

    【阿里JAVA性能优化实战】是面向Java开发人员和架构设计人员的专业课程,旨在提供系统优化的知识和技巧。本文将深入探讨Java性能优化的关键点,并基于给出的部分内容进行详细阐述。 性能调优对于任何互联网公司都是...

    大话JAVA性能优化

    在《大话JAVA性能优化》的PDF文档中,你将找到这些方面的详细讨论和实例分析,它不仅涵盖了理论知识,还提供了实战技巧和工具使用,是Java开发者进行性能优化的宝贵参考资料。通过深入学习和实践,开发者可以提升...

    Java 程序性能优化实战+桌面整理软件

    本主题将围绕"Java程序性能优化实战"这一核心,结合"桌面整理软件"的应用,探讨如何提升Java应用程序的效率并优化用户体验。 首先,我们关注的是《阿里巴巴Java性能调优实战(2021华山版)》这本书。该书是阿里巴巴...

    Java 大型网站性能优化实战从前端网络 CDN 到后端大促的全链路性能优化

    本实战指南将探讨从前端网络到后端大促的全链路性能优化策略,旨在提升网站的整体效率。 前端网络性能优化主要关注减少页面加载时间。CDN(Content Delivery Network)是一个关键的工具,它通过在全球部署多个节点,...

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

    Java程序性能优化 让你的Java程序更快、更稳定pdf文档视频资源

    Java程序性能优化是每个开发人员都需要关注的重要领域,特别是在企业级应用中,高效稳定的Java程序能够带来显著的业务优势。本资源包含一个PDF文档和相关的视频教程,旨在帮助你提升Java程序的速度和稳定性。 首先...

    Java性能优化英文版

    《Java Performance》是一本专注于Java性能优化的专业书籍,其英文版为全球的Java开发者提供了深入理解并提升Java应用性能的宝贵资源。这本书不仅涵盖了Java性能优化的基础知识,还深入探讨了高级主题,使得读者能够...

    Java程序性能优化.葛一鸣.2012.10.第1版

    《Java程序性能优化》是葛一鸣在2012年10月出版的第一版专著,这本书深入探讨了如何提升Java应用程序的运行效率和性能。在Java开发中,性能优化是一个关键领域,它涉及到代码的高效编写、内存管理、线程调度、数据库...

    实战Java虚拟机——JVM故障诊断与性能优化

    带标签的,java虚拟机中比较好的一本书,值得阅读与收藏 ..., 《实战Java虚拟机——JVM故障诊断与性能优化》不仅适合Java程序员,还适合任何一名工作于Java虚拟机之上的研发人员、软件设计师、架构师。

    实战Java虚拟机 JVM故障诊断与性能优化 葛一鸣

    《实战Java虚拟机 JVM故障诊断与性能优化》是由葛一鸣编著的一本专业书籍,主要探讨了如何在实际工作中解决Java虚拟机(JVM)的相关问题,以及如何进行性能调优。书中涵盖了许多关键的知识点,让我们一一展开讨论。 ...

    java程序性能优化-pdf+源码

    通过学习这本书,开发者不仅可以掌握Java性能优化的核心技术,还能培养出良好的编程习惯,使程序运行得更快、更稳定,为企业的系统性能提供有力保障。同时,对于个人技能提升和职业发展,这本书也具有很高的价值。

    Android性能优化之赫夫曼算法

    在Android平台上进行性能优化是开发者面临的重要任务,尤其是在处理图像数据时。赫夫曼编码(Huffman Coding)是一种有效的无损数据压缩算法,常用于JPEG图像压缩引擎中。本篇文章将深入探讨如何在Android环境中利用...

    Java秒杀系统方案优化 高性能高并发实战

    ### Java秒杀系统方案优化与高性能高并发实战 在当今互联网快速发展的背景下,高并发、高性能成为了考验系统架构的关键指标之一。特别是在电商领域中的“秒杀”活动,短时间内会有大量用户同时访问,这对系统的稳定...

    JVM故障诊断与性能优化(实战JAVA虚拟机).7z

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。  本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器...

Global site tag (gtag.js) - Google Analytics