北大青鸟java培训:简单的Java性能调优技巧?

Python09

北大青鸟java培训:简单的Java性能调优技巧?,第1张

大多数JAVA开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识。

好吧,不能说这是完全错误的。

  优化应用程序以获得最佳性能不是一件容易的事情。

但是,这并不意味着如果你不具备这些知识,就不能做任何事情。

这里有一些易于遵循的调优方式,辽宁java培训http://www.kmbdqn.cn/建议可以做个参考!  大部分建议是针对Java的。

但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言。

在讨论专门针对Java的性能调优技巧之前,让我们先来看看通用技巧。

  1.在你知道必要之前不要优化  这可能是最重要的性能调整技巧之一。

你应该遵循常见的最佳实践做法并尝试高效地实现用例。

但是,这并不意味着在你证明必要之前,你应该更换任何标准库或构建复杂的优化。

  在大多数情况下,过早优化不但会占用大量时间,而且会使代码变得难以阅读和维护。

更糟糕的是,这些优化通常不会带来任何好处,因为你花费大量时间来优化的是应用程序的非关键部分。

  那么,你如何证明你需要优化一些东西呢?  首先,你需要定义应用程序代码的速度得多快,例如,为所有API调用指定最大响应时间,或者指定在特定时间范围内要导入的记录数量。

在完成这些之后,你就可以测量应用程序的哪些部分太慢需要改进。

然后,接着看第二个技巧。

  2.使用分析器查找真正的瓶颈  在你遵循第一个建议并确定了应用程序的某些部分需要改进后,那么从哪里开始呢?  你可以用两种方法来解决问题:  ·查看你的代码,并从看起来可疑或者你觉得可能会产生问题的部分开始。

  ·或者使用分析器并获取有关代码每个部分的行为和性能的详细信息。

  希望不需要我解释为什么应该始终遵循第二种方法的原因。

  很明显,基于分析器的方法可以让你更好地理解代码的性能影响,并使你能够专注于最关键的部分。

如果你曾使用过分析器,那么你一定记得曾经你是多么惊讶于一下就找到了代码的哪些部分产生了性能问题。

老实说,我第一次的猜测不止一次地导致我走错了方向。

  3.为整个应用程序创建性能测试套件  这是另一个通用技巧,可以帮助你避免在将性能改进部署到生产后经常会发生的许多意外问题。

你应该总是定义一个测试整个应用程序的性能测试套件,并在性能改进之前和之后运行它。

  这些额外的测试运行将帮助你识别更改的功能和性能副作用,并确保不会导致弊大于利的更新。

如果你工作于被应用程序若干不同部分使用的组件,如数据库或缓存,那么这一点就尤其重要。

要想对Java应用代码进行优化,我们首先需要分析其具体工作原理。

事实上,影响性能优化效果的因素多种多样,我们需要从垃圾回收、操作系统设置以及虚拟机制等多个角度着眼,方可顺利完成任务。

在今天的文章中,江西IT培训http://www.kmbdqn.cn/将分享五项性能优化技巧,希望能为你的Java应用提升工作带来启示。

1.从最小Heap分配入手2.使用各类Java性能工具3.使用StringBuilder而非+运算符4.避免使用迭代器5.建立更好的并发控制机制

public static Object getInnter(Object con){

Object re=null

Field f

try {

f = con getClass() getDeclaredField( inner )

f setAccessible(true)

re= f get(con)                  //取得内部包装的Connection

f setAccessible(false)

} catch Exception e) {

}

return re

}

以上代码运行后 输出

con Class Type is: mchange v c p impl NewProxyConnection

Inner con Class Type is: mysql jdbc JDBC Connection

Data from DB:

o and o is same object

Data from DB:

上述代码中 首先从数据库连接池获得一个连接 发现连接类型并不是mysql的数据库连接 而是 mchange v c p impl NewProxyConnection 根据类名中可以推测 从数据库连接池中获得的连接只是一个代理 接着 通过反射 取得这个对象中名为inner的属性 并打印其Class类型 发现这才是真正的mysql连接 关闭NewProxyConnection连接 再向池中请求一个新的连接 同样获取该连接内部的实际数据库连接对象 发现 第一次使用的实际数据库连接对象o 和第二次使用的对象o 是完全相同的

这说明 前后两次数据库连接的请求均返回了相同的数据库连接 关闭NewProxyConnection连接时 并没有真正关闭数据库连接 而只是将数据库连接放入连接池保存 使得数据库连接在连接池中得到了复用 而从连接池返回的NewProxyConnection对象 只是对真实数据库连接的包装

除了线程池和数据库连接池 对于普通的Java对象 在必要的时候 也可以进行池化管理 对于那些经常使用 并且创建很费时的大型对象来说 使用对象池维护 不仅可以节省获得对象实例的成本 还可以减轻GC频繁回收这些对象产生的系统压力 但对于生成对象开销很小的对象进行池化 反而可能得不偿失 维护对象池的成本可能会大于对象池带来的好处

注意 在JDK中 new操作的效率是相当高的 不需要担心频繁的new操作对系统有性能影响 但是new操作时所调用的类构造函数可能是非常费时的 对于这些对象 可以考虑池化

       返回目录 Java程序性能优化 让你的Java程序更快 更稳定

编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

       J ME移动开发实战教学视频

Visual C++音频/视频技术开发与实战

Oracle索引技术

ORACLE G数据库开发优化指南

lishixinzhi/Article/program/Java/gj/201311/27800