洛阳java技术培训学校
洛阳java技术培训学校?不知道大家对Java就业前景了解多少。随着信息化的发展,IT培训受倒了越来越多人的追捧。在开发领域,JAVA培训成为了许多人的选!JAVA应用广泛,JAVA培训就业前景良好!目前,虽然JAVA人才的薪水很高,但是对该类人才需求旺盛的IT企业却很难倒合格的JAVA人才。
你所不知道的JAVA
大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事。下面有几个很容易遵循的建议和佳实践能够帮你创建一个性能良好的应用程序。
这些建议中的大多数都是基于Java的,但是也不一定,也有一些是可以应用于所有的应用程序和编程语言的。在我们分享基于Java的性能调优技巧之前,让我们先讨论一下这些通用的性能调优技巧。
1. 在必要之前,先不要优化
这可能是重要的性能调优技巧之一。你应该遵循常见的佳实践,并尝试有效地实现你的用例。但这并不意味着在证明它是必要之前,替换任何标准库或构建复杂的优化。
在大多数情况下,过早的优化占用了大量的时间,使得代码难以读取和维护。更糟糕的是,这些优化通常不会带来任何好处,因为你花费了大量时间来优化应用程序的非关键部分。
那么,你如何证明你需要优化某些东西呢?
首先,你需要确定应用程序代码的速度,例如,为所有API调用一个大响应时间,或者在特定时间范围内导入的记录数量。完成之后,你可以度量应用程序的哪些部分太慢而需要改进。当这样做之后,那么请继续看第二个调优技巧。
2. 使用分析器来找到真正的瓶颈
在你遵循条建议,并确定你的应用程序的某些部分的确需要改进之后,问自己从哪里开始?
你可以用两种方法来解决这个问题:
你可以看一下你的代码,从看起来可疑或者你觉得它可能会产生问题的部分开始。
或者使用分析器,获取代码中每个部分的行为和性能的详细信息。
至于为什么应该总是遵循第二种方法。
应该很明显,基于分析器的方法能让你更好地理解代码的性能含义,并允许你关注关键的部分。如果你曾经使用过分析器,你将会惊讶于代码的哪些部分造成了性能问题。然而,很多时候,你的第一次猜想会把你引向错误的方向。
3. 为整个应用程序创建性能测试套件
这是另一个帮助你避免许多意想不到问题的一般技巧,这些问题通常发生在性能改进部署到生产环境之后。你应该经常定义测试整个应用程序的性能测试套件,并在你完成性能改进之前和之后运行它。
这些额外的测试运行将帮助你识别更改的功能和性能方面的影响,并确保你不会发布一个弊大于利的更新。如果你的任务运行于应用程序的多个不同部分比如数据库或缓存,这一点尤其重要。
4. 首先解决大的瓶颈问题
在创建了测试套件并使用分析器对应用程序进行分析之后,你就有了一个需要提高性能的问题列表,这很好,但它仍然不能回答你应该从哪里开始的问题。你可以从那些可以搞定的开始,亦或者从重要的问题开始。
当然前者很诱人,因为这很快就能出结果。有时,可能需要说服其他团队成员或你的管理层,性能分析是值得的。
但总的来说,我建议首先着手处理重要的性能问题。这将为你提供大的性能改进,而且你可能只需要修复这些问题中的几个就可以解决你的性能需求。
在了解通用性能调优技巧之后,让我们再来仔细看看一些特定于Java的调优技巧。
5. 使用StringBuilder以编程方式连接字符串
在Java中有许多不同的连接字符串的选项。例如,可以使用一个简单的+或+ =、老的StringBuffer或StringBuilder。
那么,你应该选择哪种方法呢?
取决于连接字符串的代码。如果你以编程方式向字符串中添加新内容,例如,在for循环中,你应该使用StringBuilder。它比StringBuffer更容易使用和提供更好的性能。但是请记住,StringBuilder与StringBuffer不同,它不是线程安全的,而且可能不适合所有用例。
你只需要实例化一个新的StringBuilder,并调用append方法在字符串中添加一个新的部分。当你添加了所有的部分后,可以调用toString()方法来检索连接字符串。
如果你已经知道自己的字符串包含多少字符,那么你可以向不同的构造函数方法提供这个数字,以实例化一个具有被定义容量的StringBuilder。这进一步提高了它的效率,因为它不需要动态扩展它的容量。
6. 在声明中使用+连接字符串
当你在Java中实现个应用程序时,可能有人告诉你不应该用+来连接字符串。如果在应用程序逻辑中连接字符串这是正确的。字符串是不可变的,每个字符串连接的结果存储在一个新的字符串对象中。这需要额外的内存,并降低应用程序的速度,特别是在循环中连接多个字符串时。
在这些情况下,你应该遵循tip 5并使用StringBuilder。
7. 尽可能使用基本数据类型
另一种避免开销,提高应用程序性能的方法就是使用原始数据类型而不是它们的包装类。因此,好是使用int而不是Integer,或者是double而不是Double。这将让JVM将值存储在堆栈中,以减少内存消耗,并更有效地处理它。
8. 尽量避免BigInteger和BigDecimal
由于我们已经讨论了数据类型,我们再来看下BigInteger和BigDecimal。尤其是后者,由于其精度高而受欢迎。但这是有代价的。
BigInteger和BigDecimal比简单的long或double需要更多的内存,并且大大降低所有的计算速度。因此,如果你需要额外的精度,或者你的数字超过了一个long范围,好三思而后行。这可能是你在提升性能问题中需要更改的地方,特别是当你正在实现一个数学算法。
9. 首先检查当前日志
这个建议是显而易见的,但不幸的是,你会发现许多代码忽略它。在创建调试消息之前,应该先检查当前日志。
10. 使用Apache Commons StringUtils.Replace 代替String.replace
一般来说,String.replace 方法工作得很好,而且非常,特别是如果你使用的是Java 9。但是,如果应用程序需要大量的替换操作,并且你还没有更新到新的Java版本,那么检查更快和更有效的方案仍然是有意义的。
11. 缓存昂贵的资源,比如数据库连接
缓存是一种流行的解决方案来避免重复执行昂贵或频繁使用的代码片段。一般的想法很简单:重复使用这些资源比一次又一次地创建一个新的资源要便宜得多。
一个典型的例子就是在池中缓存数据库连接。创建新连接需要时间,如果重用现有连接,则可以避免。
还可以在Java语言本身中找到其他示例。例如,Integer类的valueOf方法缓存了- 128和127之间的值。你可能会说,创建一个新整数并不太贵,但它经常使用,缓存常用的值提供了性能方面的好处。
但当你考虑缓存时,请记住,缓存实现也会产生开销。你需要花费额外的内存来存储可重用资源,因此可能需要管理你的缓存,以使资源能够访问或删除过时的资源。
因此,在你开始缓存任何资源之前,请确保是经常使用。
洛阳java技术培训学校:https://www.houxue.com/kecheng-java174.html
想参加JAVA培训,这些有用!
Java虚拟机栈
与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
经常有人把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java内存区域的划分实际上远比这复杂。这种划分方式的流行只能说明大多数程序员关注的、与对象内存分配关系密切的内存区域是这两块。其中所指的"堆"在后面会专门讲述,而所指的"栈"就是现在讲的虚拟机栈,或者说是虚拟机栈中的局部变量表部分。
局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型),它不等同于对象本身,根据不同的虚拟机实现,它可能是一个指向对象起始地址的引用指针,也可能指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。
其中64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用1个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。 在Java虚拟机规范中,对这个区域规定了两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemoryError异常。
洛阳java技术培训学校:JAVA培训班
通过上面的介绍,相信大家对“洛阳java技术培训学校?”都有了一定的了解,希望对您有所帮助。
洛阳java技术培训学校?如果你对JAVA感兴趣就来厚学网,如果你想让自己多掌握一项生存的技能就来厚学网,厚学网将会满足你的各种培训需求,目前厚学网共计入驻了多家JAVA领域的知名培训机构,这里可以让客户了解全新的课程信息及真实的用户评价,让客户能够更放心,省心的选择到想学的课程.有需要的同学请联系网站,我们会为您提供内容讲解服务哦!!!~~
文中图片素材来源网络,如有侵权请联系删除 文中图片素材来源网络,如有侵权请联系删除网上报名
新闻资讯
更多>>-
软件开发培训是电脑行业最有力的保障
2015-07-07
-
洛阳北大青鸟:大学生的IT梦工厂
2015-10-19
-
JAVA学习哪些内容?能从事什么工作?
2015-10-20
-
洛阳北大青鸟:学软件开发,赢高薪未来
2015-10-21
-
洛阳北大青鸟:IT技能助力高中生成就辉煌人生!
2015-06-07