返回顶部
首页 > 资讯 > 精选 >10种简单的Java性能优化
  • 745
分享到

10种简单的Java性能优化

java性能优化ava 2023-05-30 19:05:50 745人浏览 泡泡鱼
摘要

最近“全网域(WEB Scale)”一词被炒得火热,人们也正在通过扩展他们的应用程序架构来使他们的系统变得更加“全网域”。但是究竟什么是全网域?或者说如何确保全网域?扩展的不同方面全网域被炒作的最多的是扩展负载(Scaling load),

最近“全网域(WEB Scale)”一词被炒得火热,人们也正在通过扩展他们的应用程序架构来使他们的系统变得更加“全网域”。但是究竟什么是全网域?或者说如何确保全网域?

扩展的不同方面

全网域被炒作的最多的是扩展负载(Scaling load),比如支持单个用户访问的系统也可以支持10 个、100个、甚至100万个用户访问。在理想情况下,我们的系统应该保持尽可能的“无状态化(stateless)”。即使必须存在状态,也可以在网络的不同处理终端上转化并进行传输。当负载成为瓶颈时候,可能就不会出现延迟。所以对于单个请求来说,耗费50到100毫秒也是可以接受的。这就是所谓的横向扩展(Scaling out)。

扩展在全网域优化中的表现则完全不同,比如确保成功处理一条数据的算法也可成功处理10条、100条甚至100万条数据。无论这种度量类型是是否可行,事件复杂度(大O符号)是最佳描述。延迟是性能扩展杀手。你会想尽办法将所有的运算处理在同一台机器上进行。这就是所谓的纵向扩展(Scaling up)。

如果天上能掉馅饼的话(当然这是不可能的),我们或许能把横向扩展和纵向扩展组合起来。但是,今天我们只打算介绍下面几条提升效率的简单方法。

大O符号

Java 7的 ForkJoinPool 和Java8 的并行数据流(parallel Stream) 都对并行处理有所帮助。当在多核处理器上部署Java程序时表现尤为明显,因所有的处理器都可以访问相同的内存。

所以,这种并行处理较之在跨网络的不同机器上进行扩展,根本的好处是几乎可以完全消除延迟。

但不要被并行处理的效果所迷惑!请谨记下面两点:

  • 并行处理会吃光处理器资源。并行处理为批处理带来了极大的好处,但同时也是非同步服务器(如Http)的噩梦。有很多原因可以解释,为什么在过去的几十年中我们一直在使用单线程的Servlet模型。并行处理仅在纵向扩展时才能带来实际的好处。
  • 并行处理对算法复杂度没有影响。如果你的算法的时间复杂度为 O(nlogn),让算法在 c 个处理器上运行,事件复杂度仍然为 O(nlogn/c), 因为 c 只是算法中的一个无关紧要的常量。你节省的仅仅是时钟时间(wall-clock time),实际的算法复杂度并没有降低。

降低算法复杂度毫无疑问是改善性能最行之有效的办法。比如对于一个 HashMap 实例的 lookup() 方法来说,事件复杂度 O(1) 或者空间复杂度 O(1) 是最快的。但这种情况往往是不可能的,更别提轻易地实现。

如果你不能降低算法的复杂度,也可以通过找到算法中的关键点并加以改善的方法,来起到改善性能的作用。假设我们有下面这样的算法示意图:

10种简单的Java性能优化

该算法的整体时间复杂度为 O(N3),如果按照单独访问顺序计算也可得出复杂度为 O(N x O x P)。但是不管怎样,在我们分析这段代码时会发现一些奇怪的场景:

  • 开发环境中,通过测试数据可以看到:左分支(N->M->Heavy operation)的时间复杂度 M 的值要大于右边的 O 和 P,所以在我们的分析器中仅仅看到了左分支。
  • 在生产环境中,你的维护团队可能会通过 AppDynamics、DynaTrace 或其它小工具发现,真正导致问题的罪魁祸首是右分支(N -> O -> P -> Easy operation or also N.O.P.E.)。

在没有生产数据参照的情况下,我们可能会轻易的得出要优化“高开销操作”的结论。但我们做出的优化对交付的产品没有起到任何效果。

优化的金科玉律不外乎以下内容:

  • 良好的设计将会使优化变得更加容易。
  • 过早的优化并不能解决多有的性能问题,但是不良的设计将会导致优化难度的增加。

理论就先谈到这里。假设我们已经发现了问题出现在了右分支上,很有可能是因产品中的简单处理因耗费了大量的时间而失去响应(假设N、O和 P 的值非常大), 请注意文章中提及的左分支的时间复杂度为 O(N3)。这里所做出的努力并不能扩展,但可以为用户节省时间,将困难的性能改善推迟到后面再进行。

这里有10条改善Java性能的小建议:

1、使用StringBuilder

StingBuilder 应该是在我们的Java代码中默认使用的,应该避免使用 + 操作符。或许你会对 StringBuilder 的语法糖(syntax sugar)持有不同意见,比如:

String x = "a" + args.length + "b";

--结束END--

本文标题: 10种简单的Java性能优化

本文链接: https://lsjlt.com/news/220685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 10种简单的Java性能优化
    最近“全网域(Web Scale)”一词被炒得火热,人们也正在通过扩展他们的应用程序架构来使他们的系统变得更加“全网域”。但是究竟什么是全网域?或者说如何确保全网域?扩展的不同方面全网域被炒作的最多的是扩展负载(Scaling load),...
    99+
    2023-05-30
    java 性能优化 ava
  • nodejs的10个性能优化技巧
    下面是我们使用Node.js时遵循的10个性能规则: 1. 避免使用同步代码 在设计上,Node.js是单线程的。为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作。...
    99+
    2022-06-04
    性能 技巧 nodejs
  • oracle性能优化(项目中的一个sql优化的简单记录)
    在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性。其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了。本文主要记录在实际项目中,一个需要查询很慢的sql的优化过程,如果有更...
    99+
    2015-11-21
    oracle性能优化(项目中的一个sql优化的简单记录)
  • 对MySQL性能优化的简单办法是怎样的
    对MySQL性能优化的简单办法是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 对拥有一个几十万行表的...
    99+
    2024-04-02
  • 优化MySQL数据库性能的十个参数简单介绍
    这篇文章主要介绍“优化MySQL数据库性能的十个参数简单介绍”,在日常操作中,相信很多人在优化MySQL数据库性能的十个参数简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 简单的计算功能,还需要优化
    #还有需要优化的#!/usr/bin/env python3 Example = '1-2*((60-30+(9-2*5/-3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))' im...
    99+
    2023-01-31
    还需要 简单 功能
  • java性能优化之代码缓存优化
    目录JIT编译器版本默认情况JVM如何选择编译器?如何判断当前环境jvm使用的编译器?代码缓存代码缓存占满发生在什么情况?代码缓存默认大小如何确定正好的代码缓存?如何监控代码缓存?J...
    99+
    2024-04-02
  • java equalsignorecase性能怎么优化
    在Java中,可以使用以下方法来优化equalsIgnoreCase的性能:1. 尽量避免在循环中使用equalsIgnoreCas...
    99+
    2023-09-23
    java
  • java性能优化四种常见垃圾收集器汇总
    目录前言常见的垃圾回收器和算法serial 串行垃圾收集器Parallel 多线程垃圾收集器CMS 收集器G1 收集器显式垃圾收集前言 本篇文章我们来具体看看如何选择合适的垃圾收集器...
    99+
    2024-04-02
  • Java 中如何优化 load 性能?
    在 Java 程序中,我们经常需要从磁盘或网络中读取数据。在这种情况下,load 操作的性能是非常关键的,因为它直接影响了整个程序的运行效率。本文将介绍一些优化 load 性能的技巧,帮助你提高程序的性能表现。 使用缓存 缓存是提高 ...
    99+
    2023-10-15
    load spring 编程算法
  • java接口性能优化技巧
    目录背景哪些问题会引起接口性能问题问题解决慢查询(基于 mysql)①深度分页②未加索引③索引失效④join 过多 or 子查询过多⑤in 的元素过多⑥单纯的数据量过大业务逻辑复杂①...
    99+
    2024-04-02
  • java接口性能如何优化
    优化Java接口的性能可以从以下几个方面入手:1. 减少接口方法数量:接口方法越多,调用时的开销就越大。因此,可以考虑将一些耗时较长...
    99+
    2023-08-20
    java
  • 优化SQL SELECT语句性能的6个简单技巧分别是什么
    本篇文章给大家分享的是有关优化SQL SELECT语句性能的6个简单技巧分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SELECT语...
    99+
    2024-04-02
  • Java性能优化的细节有哪些
    这篇文章主要介绍“Java性能优化的细节有哪些”,在日常操作中,相信很多人在Java性能优化的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java性能优化的细节有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-16
  • Java性能的优化技巧有哪些
    这篇文章主要讲解了“Java性能的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java性能的优化技巧有哪些”吧!1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题...
    99+
    2023-06-17
  • Java的性能优化细节有哪些
    今天小编给大家分享一下Java的性能优化细节有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 尽量在合适的场合使用单...
    99+
    2023-06-04
  • 优化 Java 线程池性能的秘诀
    线程池是 Java 中管理线程的重要组件,优化其性能至关重要。通过遵循以下秘诀,可以提高线程池效率,增强应用程序的性能。 1. 正确配置核心线程数和最大线程数 核心线程数定义了线程池始终保持的线程数量,而最大线程数限制了创建的新线程数量。...
    99+
    2024-03-13
    线程池
  • 10 个技巧,优化 ASP 控件状态管理性能
    2. 使用控件状态 控件状态仅存储控件的局部状态,比ViewState更有效。启用控件状态,并确保只存储必需的状态。 3. 使用代码隐藏 代码隐藏将代码与UI分离,减少页面大小并提高性能。 4. 使用部分页面渲染 仅更新需要更新的页面部分...
    99+
    2024-04-02
  • 【整理总结】优化jQuery性能的多种方法
    如何优化jQuery性能?下面本篇文章给大家介绍一些针对 jQuery性能 的优化方法,希望对大家有所帮助!我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些。找了很多文章后,我决定将最好最常用的一些优化...
    99+
    2023-05-14
    jquery javascript
  • java性能优化笔记(一)概述
    性能参考指标:执行时间: 程序从开始到结束的执行时间。CPU时间: 函数或者线程占用的cpu时间。内存分配: 程序运行期间所占内存。磁盘吞吐量: 硬盘I/O使用情况。网络吞吐量: 网络使用情况。响应时间:用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作