`
文章列表
某些类型的 bug 经常落到性能调优师手中来进行修复,虽然严格地讲,它们算不上是性能问题。通常由对象泄漏造成的内存不足就是这类 bug 中的一个。(在本专栏前面的一期中介绍过如何在“垃圾对话(Trash talk)”中处理这些问题,请参阅 参考资料。)另外一类经常落到性能调优师手上修补的 bug 就是线程死锁和其他线程方面的问题,例如竟态条件,因为这些问题一般只在对程序进行负载测试时才会表现出来。 将这些 bug 交到性能调优师手中通常有很好的理由:识别和清除性能及内存瓶颈所需要的工具,与识别对象泄漏和竟态条件的工具相同。死锁相对来说比较容易识别;只要注意到应用程序冻结,就会有堆栈跟踪显示是哪 ...
    调优的并不总是速度,有时候需要调整应用程序的其他方面,如果应用程序需要调优,要做的第一件事通常是使用剖析程序监控应用程序。但是,剖析并不总是可行的,有时候原因可能很可笑。 关注性能的本期文章中, Jack 和 Kirk 讲述了他们最近经历的一件事:他们奉命剖析一个胖客户机,事实上它是如此庞大,根本没有为剖析程序留下空间。 我们从来还没有遇到过调优应用程序内存占用的问题。通常,我们看到的和内存有关的调优要求都涉及到降低垃圾收集的开销,理想情况下可以通过调整堆的大小或者改变垃圾收集算法来解决,如果不行的话,还可以采用各种技术减少内存中的对象。但是,有时候无论分配和垃圾收集的效率如何,应用 ...
    您的应用程序是否经常出现 out-of-memory 错误?用户是否感受到响应时间有些不稳定?应用程序是否在相当长的时间内变得没有响应?应用程序的性能是否显得迟缓了?如果对任何一个问题的回答是肯定的,那么您很可能遇到了垃圾收集的问题了。先别进行优化,且听听 JavaPerformanceTuning.com 的 Jack Shirazi 和 Kirk Pepperdine 来解释如何识别垃圾收集问题,并由此帮助您回答这个问题:您知道垃圾收集器在干什么吗? 许多开发人员认为,内存管理至多是开发业务逻辑的主要任务之外的一项不重要的工作 —— 直到业务逻辑不能像预期的或者测试时那样执行得好。 ...
在这个专栏的 第一期,我们讨论了抛出异常的开销。这个月,我们换一个角度再来看这个主题 ―― JVM 如何处理所抛出的异常 ―― 并且我们要考虑,最理想的异常编码应该看成是早期的优化还是最优方法?编码的艰难决择:应 ...
    热衷于 Java 性能的 Jack Shirazi 和 Kirk Pepperdine ―― JavaPerformanceTuning.com 的董事和 CTO ―― 跟踪遍布 Internet 上的性能讨论,探究是什么在困扰着开发人员。在浏览 Usenet 新闻组 comp.lang.java 时,他们遇到了几个有意思的底层性能 ...
如果您认为 Java 游戏开发人员是 Java 编程世界的一级方程式赛车手,那么您就会明白为什么他们会如此地重视程序的性能。 游戏开发人员几乎每天都要面对的性能问题,往往超过了一般程序员考虑问题的范围。哪里可以找到这些特殊的开发人员呢?Java 游戏社区就是一个好去处(参见 参考资料)。 虽然在这个站点可能没有很多关于服务器端的应用,但是我们依然可以从中受益,看看这些“惜比特如金”的游戏开发人员每天所面对的,我们往往能从中得到宝贵的经验。让我们开始游戏吧! 对象泄漏 游戏程序员跟其他程序员一样――他们也需要理解 Java 运行时环境的一些微妙之处,比如垃圾收集。垃圾收集可能是使您感到 ...
    Eclipse 提供了一个强大的开发平台,越来越多的应用基于 Eclipse 来开发。但是由于 Eclipse 作为一个灵活的平台,其类装入器具有一定的特殊性,在开发 Eclipse 插件时我们经常遇到类找不到的问题,尤其是当我们开发的应用使用了第三方的软件包时。本文深入剖析了 Java 的类装入器机制以及 Eclipse 的类装入器的原理与模型,并总结了Eclipse 插件应用开发常见的与类装载器相关的问题,同时给出了相应的解决方法。介绍 Eclipse 提供了一个强大的开发平台,越来越多的应用基于 Eclipse 来开发。但是由于 Eclipse 作为一个灵活的平台,其类装 ...
类装入问题解密系列(共四部分) 这份由四部分组成的系列中,讨论了在 Java 开发中可能遇到的各种类装入问题,解释了它们为什么会发生和如何解决它们。 第 1 部分,类装入和调试工具介绍 ...
在系统的性能测试过程中,当系统的处理能力有某种变化趋势时, 除了关于等待队列、执行线程,EJB 池以及数据库连接池和 Statement Cache 方面的调优外,还要考虑到 Java 垃圾收集器(Garbage Collection,本文简称 GC)对系统性能 ...
    在使用 Java™ 语言的泛型时,通配符非常令人困惑,并且最常见的一个错误就是在使用有界通配符的两种形式的其中之一(“? super T” 和 “? extends T”)时出现错误。您出错了吗?别沮丧,即使是专家也会犯这种错误,本 ...
    通配符是 Java™ 语言中最复杂的泛型之一,特别是围绕捕获通配符 的处理和令人困惑的错误消息。在本文中,资深 Java 开发人员 Brian Goetz 解释了一些由 javac 生成的怪异错误消息并提供了一些简化泛型使用的技巧和解决方法 ...
    泛型是 Sun 公司发布的 JDK 5.0 中的一个重要特性,它的最大优点是提供了程序的类型安全同可以向后兼容。为了帮助读者更好地理解和使用泛型,本文通过一些示例从基本原理,重要概念,关键技术,以及相似技术比较等多 ...
许多工具都是围绕使用 Java 反射而设计的,它们的用途包括从用数据值填充 GUI 组件到在运行的应用程序中动态装载新功能。反射对于在运行时分析数据结构特别有用,许多在内部对象结构与外部格式(包括 XML、数据库和其他持久化格式)之间转换的框架都基于对数据结构的反射分析。 使用反射分析数据结构的一个问题是标准 Java 集合类(如 java.util.ArrayList)对于反射来说总是“死胡同(dead-end)” —— 到达一个集合类后,无法再访问数据结构的更多细节,因为没有关于集合中包含的项目类型的信息。Java 5 改变了这一情况,它增加了对泛型的支持,将所有集合类转换为支持类型的泛型 ...
    Java 开发人员和研究员 Eric Allen 继续讨论 JSR-14 和 Tiger 中的泛型类型,并着眼于在泛型类型中添加 naked 类型参数的 new 操作支持这一分支。 这一系列主要讨论在 Java 编程中添加泛型类型,本文是其中的一篇,将研究还未讨 ...
J2SE 1.5 ― 代号为“Tiger” ― 计划在 2003 年年底发布,它将包括泛型类型(如在 JSR-14 原型编译器中预先展示的那样,现在可下载获得)。在 第 1 部分中,我们讨论了泛型类型的基础知识,以及为什么它们是对 Java 语言的一个重要且迫切需要的补充。我们还说明了为 Tiger 制定的泛型类型的实现怎么会包含数个“缺陷”,这些缺陷限制了可以使用泛型类型的上下文。 为了帮助新程序员有效地使用泛型类型,我将详细说明到底泛型类型的哪些用法在 Tiger 和 JSR-14 中是被禁止的,并将说明为什么这些限制是 JSR-14(理所当然还有 Tiger)为了在 JVM 上兼容地实现 ...
Global site tag (gtag.js) - Google Analytics