一,JAVA性能优化之设计优化

设计优化处于性能优化手段的上层。它往往须要在软件开发之前进行。在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设计和系统架构对软件总体设计质量有决定性的影响。所以,设计调优对系统的性能影响也是最大的,假设说,代码优化。JVM优化都是对系统微观层次的“量”的优化,那设计优化就是对系统”质”的优化.

设计优化的一大显著特征是:它能够规避某一个组件的性能问题,而是改良组件的实现;比方:组件A通过循环监控不断的检測时间E是否发生,其检測行为必定会占用部分系统资源,因此,开发者必须检測频率和资源消耗上取得平衡,假设检測频率太低,尽管降低了资源消耗,可是系统实时反应性就会降低,假设进行代码层的调优,就须要优化检測方法的实现及要求得一个最为恰当的检測频率.对于这个问题我们就能够用设计模式中的观察者模式 ,当事件E发生的时刻,由事件E通知组件A,从而触发组件A的行为.这样的设计从根本上攻克了存在性能隐患的循环监控,从根本上攻克了这一问题.

进行设计优化时,设计人员和必须熟悉经常使用的设计方法,设计模式,以及主要的性能组件和经常使用的优化思想,并将其有机地集成在软件系统中.

注意:一个良好的系统设计能够规避非常多潜在在的性能问题.因此,尽可能多花些时间在系统设计上,是创建高性能程序的关键

二,JAVA性能优化之代码优化

代码调优是在软件开发中,或者是软件开发完毕后,软件维护过程中进行的程序代码的改进和优化.代码优化涉及诸多编码技巧,须要开发者熟悉相关的语言API ,并在适合的场景中正确的使用相关API或类库.同一时候,对算法,数据结构的灵活使用,也是代码优化的一个重要内容.

尽管代码优化时从微观上对性能进行调整,可是一个”好”的实现和一个”坏”的实现对系统的影响也是非常大的.比方,相同作为List的实现,LinkedList和ArrayList在随机訪问上的性能却差了好几个量级;比方相同是文件读写的实现,使用Stream方式和使用JAVA NIO的方式,其系能可能又会是还有一个数量级.

因此,尽管与设计优化相比,笔者将代码优化成为在微观层面上的优化,但它却是对系统性能产生最直接影响的优化方法.

三,JVM优化

因为JAVA软件总是执行在JVM虚拟机之上。对JVM虚拟机进行优化也能一定程度上的提升JAVA程序的性能。JVM通常能够在软件开发后期进行,如在开发完毕或者是软件开发的某一里程碑阶段。

作为JAVA软件的执行平台。JVM的各项參数将会直接影响JAVA程序的性能。

比方,JVM的堆大小,垃圾回收策略等等。

要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。

四。数据库优化

对绝大部分应用系统而言。数据库是不可缺少的一部分。JAVA程序能够使用JDBC的方式连接数据库。对数据库的调优能够分为三个部分:

  • 在应用层对SQL语句进行优化;
  • 对数据库进行优化。
  • 对数据库软件进行优化。

在应用层优化数据库訪问。涉及大量的编程技巧。比方。当使用JDBC进行查询的时候,对于大量拥有相同结构的SQL查询,能够使用PerparedStatement取代Statement。以提高数据库的查询效率。在使用Select语句中,显示指定要查询的列名 ,避免使用*

在对数据库优化时,主要目的是建立一个具有良好表结构的数据库。

比方,为了提高多表级联查询的效率,能够合理地使用冗余字段;对于大表,能够使用行的水平分割或者相似Oracle分区的技术;为了提高数据的查询的效率,能够建立有效水平分割或者相似Oracle分区表的技术;为了提高数据库查询效率。在select语句中。显示指定要查询的列名,避免使用*。

在对数据库进行优化时。主要目的是建立一个具有良好表结构的数据库。比方,为了提高多表级联查询效率,能够合理地使用冗余字段。对于大表。能够使用行数据来水平分割,为了提高数据库的查询效率,能够建立有效且事宜的索引

五,JAVA性能优化之操作系统优化

操作系统,调优的手段和參数可能有所不同,比方,在主流Unix系统中。共享内存段。信号量,共享内存最大值(shmmax)。共享内存最小值(shmmin)等都是能够进行优化的系统资源.此外,如最大文件句柄数,虚拟内存大小,磁盘的块大小等參数都可能对软件的性能产生影响.配置虚拟内存界面

JAVA性能优化的五种方式的更多相关文章

  1. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  2. Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

    示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...

  3. JAVA解析xml的五种方式比较

     1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ① ...

  4. Java遍历map的五种方式

    使用For-Each迭代entries 这是最常见的方法,并在大多数情况下更可取的.当你在循环中需要使用Map的键和值时,就可以使用这个方法 Map<Integer, Integer> m ...

  5. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  6. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

  7. 五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  8. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  9. 【开发笔记】- Java读取properties文件的五种方式

    原文地址:https://www.cnblogs.com/hafiz/p/5876243.html 一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供j ...

随机推荐

  1. bzoj1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 题目:传送门 题解: 复习splay所以来刷个水... 题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值 ...

  2. CGContext含义

    代码 含义 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文 CGContextMoveToPoint 开始画线 CGContex ...

  3. ubuntu在桌面创建快捷方式

    在/usr/share/applications下列出 *.desktop文件 例如: 首先查看所要创建的快捷方式有么有: ls /usr/share/applications | grep ecli ...

  4. <Android Framework 之路>Android5.1 Camera Framework(二)

    上一次讲解了一下CameraService的启动过程,今天梳理一下Camera预览的过程 StartPreview过程 首先,我们还是从应用层的使用入手 Camera.java (packages\a ...

  5. DB2报“数据库日志已满”问题解决

    用控制中心直接改会比较容易一点,在数据库名称上点右键-->配置-->日志-->日志文件大小.主日志文件数.辅助日志文件数改大一点. 也可用命令行db2cmd db2 update d ...

  6. thinkphp5-----模板中函数的使用

    1.在模板中使用php函数 在thinkphp的html中,我们经常会遇到一些变量难以直接从php控制端直接处理,这些变量只有在模板中循环输出的时候处理比较合适,这个时候,我们就要在模板中使用函数 1 ...

  7. 第四章 Python之文件处理

    文件操作 文件操作一般分为三步:打开文件得到文件句柄并赋值给一个变量--->通过句柄对文件进行操作-->关闭文件 f=open(r'C:\Users\hesha\PycharmProjec ...

  8. servlet实现定时刷新功能

    1,继承httpservlet类重写doget个dopost方法 2,发送头消息 response.setHeader("refresh","间隔秒数:url=目标地址& ...

  9. Pyhton学习——Day60

    Form组件 - form表单(验证:保留上次内容) - - Ajax(验证:无需上次内容) - 返回HttpResponse - 前端:跳转或错误信息 1. Form组件扩展: 1.简单扩展 利用F ...

  10. 为什么使用GitHub

    GitHub的特点: 1.开源式分布版本管理系统 2.开源项目集中的代码库 3.所有略有规模的公司都在使用 GitHub的功能介绍: 1.记录多个版本 2.查看历史操作,可以进行版本吧回退和前进的控制 ...