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

Java性能优化之实时性[3]

    博客分类:
  • Java
阅读更多

——万事开头难

 


如果你的应用程序能够满足内存和速度的要求,有时还是不够的,对于某些应用程序来说,尤其是实时系统,它还必须满足良好的用户体验,这就要求你的程序能够做到好的实时性。

关于用户体验,有很多心理学的研究。如果你了解用户懒惰和缺乏耐心等心理,你也许会更加明白,实时性有时会如此重要。相关的文章比如网站打开速度的心理学人之初,性本懒 等等。但是实时性的要求也不局限于用户体验,有许多被称之为 RT 应用的程序要求必须严格地满足实时同步需求,比如控制飞机方向的应用程序不能够有任何原因的延迟,否则将导致灾难性的后果。

由于很多重要原因,Java 语言在实时系统中的应用非常有限,导致Java写出来的应用程序有时实时性很差。这些原因包括 Java 语言设计中固有的不确定性性能影响,例如动态类加载,以及 Java 运行时环境(Java Runtime Environment,JRE)本身的不确定性性能影响,例如垃圾收集器和本地代码编译。

当然,为了解决这些问题,使得Java能够用来构建实时系统,一些规范应运而生,比如RTSJ。关于实时系统和RTSJ,可以参照文章:实时 Java: 使用 Java 语言编写实时系统或者这里的转载。我这里不再赘述。

我主要讲一下我碰到的一个例子: 在某些Swing应用程序中发现,做某些操作时,第一次总是比较慢,以后就好了,有时候时间相差一个数量级,导致使用起来达不到正常的用户RT需求,用户就不高兴了,这正是没有满足用户缺乏耐心的需求,可以说是软障碍。为什么第一次总是比较慢呢,第一次新建慢,第一次编辑慢,第一次弹出某个对话框也慢?这真是奇怪。我之所以出现这样的困惑,其实是因为那时候我还不理解类加载和本地代码编译的具体细节。

在运行时,当我们想生成这个类的对象时,JVM首先检查这个类的Class对象是否已经加载。如果尚未加载,JVM就会根据类名查找.class文件,并将其载入内存。一个与 Java 一致的 JVM 必须延迟加载类,直到程序第一次引用该类。根据被加载类所在的介质(磁盘或其他)的速度、类的大小、类加载器本身的开销,类加载的时间有所不同。加载类的延迟通常高达 10 毫秒。如果需要加载几十或几百个类,则加载时间本身就会引起很长时间的意外延迟。仔细地设计应用程序,使应用程序在启动时加载所有的类,但是这必须手动完成,因为 Java 语言规范不让 JVM 提前执行这一步。

再让我们来看看编译:将 Java 代码编译为本地代码引发了与类加载类似的问题。大多数现代 JVM 开始先解释 Java 方法,然后仅将频繁执行的方法编译成本地代码。延迟编译促成了快速启动,并减少了应用程序运行期间执行的编译数量。但是使用解释后的代码执行任务和使用编译后的代码执行任务在时间上有巨大的差异。对于硬 RT 应用程序来说,由于无法预测何时发生编译,将导致很大程度的不确定性,从而无法有效地规划应用程序的行为。对于类加载,通过在应用程序启动阶段使用 Compiler 类以编程的方式编译方法可以减轻这一问题,但是维护这样的方法非常乏味并且容易发生错误。

一旦找到的问题的原因,那么解决问题的方法很简单,可以在某个合适的空闲的时候,提前进行类加载和编译,那么当第一次进行一些实时操作时,所要用到的类已经加载或者相关代码已经编译,第一次操作便不再慢了。

分享到:
评论

相关推荐

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

    ### Java程序性能优化的重要性和目标 在软件开发过程中,特别是在企业级应用中,程序的性能往往直接关系到用户体验的好坏乃至系统的稳定运行。因此,进行有效的性能优化是必不可少的。《Java程序性能优化》这本书...

    大话java性能优化 周明耀 完整版

    《大话java性能优化》是周明耀先生的一本深入探讨Java性能调优的专业书籍,其主要内容涵盖了Java程序设计中的各种性能优化策略和技术。这本书旨在帮助开发者理解和掌握如何提升Java应用的运行效率,减少资源消耗,...

    Java性能优化技巧集锦

    Java性能优化是提升软件效率和用户体验的关键步骤,涵盖了多种技术和策略。本文将深入探讨Java通用篇、J2EE篇、GUI篇、EJB篇以及缓存优化等方面的知识点,旨在帮助开发者实现更高效的代码。 一、Java通用篇 在Java...

    java性能优化集锦

    在Java开发过程中,性能优化是不可或缺...总结起来,Java性能优化是一个综合性的过程,涉及到代码编写、系统设计、资源管理等多个层面。通过对这些知识点的学习和实践,开发者能够构建出更加高效、稳定的Java应用程序。

    java性能优化

    在Java性能优化领域,开发者...总的来说,Java性能优化是一个综合性的过程,涉及源码的优化、工具的运用以及对JVM工作原理的理解。通过上述方法,开发者可以有效地提升Java应用的性能,实现更高的系统效率和用户体验。

    java性能优化学习材料

    Java性能优化是一个涵盖广泛的主题,它涉及到代码质量、内存管理、并发处理、数据库交互等多个方面。这份学习材料可能包含了各种优化技巧和最佳实践,旨在帮助开发者提升Java应用程序的效率和响应速度,降低资源消耗...

    Java程序性能优化 让你的Java程序更快、更稳定.zip

    本资料包“Java程序性能优化 让你的Java程序更快、更稳定”专注于提升Java应用程序的运行效率和稳定性。 一、JVM优化 Java程序的性能优化很大程度上依赖于Java虚拟机(JVM)的调优。理解JVM的工作原理,包括垃圾...

    1Java性能优化一.zip

    一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层。它往往须要在软件开发之前进行。在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设计和...

    java性能优化权威指南

    总而言之,《Java性能优化权威指南》是一本实用性强、内容丰富的参考书,它不仅提供了丰富的理论知识,还给出了大量的实践指导,帮助读者构建起一套完整的Java性能优化体系。无论是初学者还是有经验的开发者,都能...

    JAVA代码优化工具

    1. **JProfiler**: JProfiler是一款强大的Java性能分析器,它提供了详细的内存分析,CPU剖析,线程监控等功能。通过可视化界面,开发者可以识别和解决内存泄漏、过度的对象创建以及CPU密集型的方法等问题。 2. **...

    《java性能优化》源码

    《Java性能优化》一书是Java开发者的重要参考资料,它深入探讨了如何提升Java应用程序的运行效率,涵盖了从代码设计到系统调优的多个层面。源码是书籍理论知识的实践体现,通过分析和学习这些源码,我们可以更直观地...

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

    在构建和运行大型Java网站的过程中,性能优化是至关重要的,它直接影响着用户体验、服务器资源的利用率以及业务的可扩展性。本实战指南将探讨从前端网络到后端大促的全链路性能优化策略,旨在提升网站的整体效率。 ...

    Java开发后端性能优化

    JVM是Java性能优化的重要环节。理解JVM的工作原理,如垃圾收集机制、类加载机制,以及如何调整JVM参数,都是优化的关键。例如,设置合适的堆大小、新生代与老年代比例、GC策略等,可以显著改善应用性能。在容器化...

    使用JAVA内存数据库h2database性能优化

    【使用JAVA内存数据库h2database性能优化】 在开发应用程序时,我们经常遇到性能瓶颈,特别是当涉及到大量的IO操作时。数据库访问是这类问题的主要来源,特别是在处理高并发、实时计算和海量数据监控的情况下。例如...

    Java性能优化技巧集锦.rar

    Java性能优化是提升系统效率和用户体验的关键环节,尤其在企业级应用中,高效的代码执行能够带来显著的成本节约和用户满意度提升。"Java性能优化技巧集锦"可能包含了多个方面的内容,旨在帮助开发者掌握如何在Java...

    Datadog在Java应用中的监控与性能优化实践

    在现代云原生应用架构中,监控和性能优化是确保服务稳定性和高效运行的关键。Datadog,作为一个强大的监控和分析平台,为Java等语言的应用提供了深入的监控解决方案。本文将详细介绍如何在Java应用中集成Datadog,...

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

    《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的专著,旨在帮助开发者解决实际工作中遇到的JVM相关问题,提升系统的性能表现。通过对JVM内部机制的深入理解,我们可以更有效地调试、...

    Java程序性能优化

    在Java编程领域,程序性能优化是一项至关重要的任务,它直接影响到软件的运行效率和用户体验。...同时,阅读和分析提供的文档《java性能优化.doc》和《Java程序性能优化(23条).doc》将更深入地理解这些优化策略。

Global site tag (gtag.js) - Google Analytics