Java性能调优20——Java SE API 技巧

在某些 Java SE API 的实现中,存在一些会影响性能的怪异行为,本章将对其进行探讨。JDK 中有很多这样的实现细节,经常会其导致的性能问题。

Java性能调优19——数据库最佳实践(下)

JPA 的性能直接受底层 JDBC 驱动程序的影响,大多数影响 JDBC 驱动程序性能的因素都同样作用于 JPA。除此之外,JPA 的性能还受一些额外因素的影响。 通过调整实体类的字节码能够实现很多的 JPA 性能提升。在 Java EE 的环境中,这种性能的提升是无缝透明的。在 Java SE 的环境中,确保使用正确的字节码的处理方式是非常重要的。否则,JPA 应用程序的性能可能是无法预测的:期望推迟载入的字段可能很早就加载了,保存到数据库的数据可能是冗余的,期望保持在 JPA 缓存中的数据可能还需要从数据库中再次提取,等等。

Java性能调优18——数据库最佳实践(上)

本章主要探讨由 Java 驱动的数据库应用的性能(而不会讨论数据库优化相关内容,如果需要的话可能需要新开一个系列)。访问数据库的应用程序经常会受制于一些与 Java 不直接相关的性能问题,譬如使用的数据库有 I/O 瓶颈,或者由于关键索引缺失,导致 SQL 查询需要做全表扫描。要解决这些问题,不必调优 JVM,也不需要修改应用代码。处理数据库相关的性能问题需要我们(从其他的源头)了解如何为数据库应用编程及调优。

Java性能调优17——Java EE 性能调优(下)

不同系统间的数据交换可以使用 XML、JSON 和其他基于文本的格式。Java 进程间交换数据,通常就是发送序列化后的对象状态。尽管序列化在 Java 中随处可见,但 Java EE 中还有两点需要重点考虑。

Java性能调优16——Java EE 性能调优(上)

本章关注的是 Java EE(特别是 Java EE 6 和 7),涵盖了 JSP、servlet 和 EJB 3.0 会话 Bean——因为 EJB 3.0 实体 Bean(Java 持久化 API 实体,即 JPA)并不限定于 Java EE 技术(后面持久化优化章节将深入讨论),所以本章没有涵盖。

Java性能调优15——线程与同步的性能(下)

当空间非常珍贵时,可以调节线程所用的内存。每个线程都有一个原生栈,操作系统用它来保存该线程的调用栈信息(比如,main() 方法调用了 calculate() 方法,而 calculate() 方法又调用了 add() 方法,栈会把这些信息记录下来)。 不同的 JVM 版本,其线程栈的默认大小也有所差别,具体如下表所示。一般而言,如果在 32 位 JVM 上有 128 KB 的栈,在 64 位 JVM 上有 256 KB 的栈,很多应用实际就可以运行了。如果这个值设置得太小,潜在的缺点是,当某个线程的调用栈非常大时,会抛出 StackOverflowError。

Java性能调优14——线程与同步的性能(中)

在本节中,当用到“同步”(synchronization)这个术语时,它指的是这样的代码:这段代码在一个代码块内,它们对一组变量的访问看上去是串行的,每次只有一个线程能访问内存。具体而言,既包括用 synchronized 关键字保护的代码块,也包括用 java.util.concurrent.lock.Lock 实例保护的代码,再就是 java.util.concurrent 和 java.util.concurrent.atomic 包内的代码。

Java性能调优13——线程与同步的性能(上)

从刚问世起,Java 的部分魅力就来自其多线程。即便在多核和多 CPU 系统司空见惯之前,能够轻松编写多线程程序也是 Java 的一个标志性特征。 Java 性能方面的吸引力显而易见:如果有两个 CPU 可用,那么一个应用能够完成的工作量可能是原来的 2 倍,或者是以快 1 倍的时间完成相同的工作量。当然,这是在假设任务可以分解成离散的片段的前提之下的,因为 Java 不是能自动找出算法性部分并实现并行化的语言。幸运的是,今日所见之计算,往往是离散性的任务:服务器处理来自离散的客户端的同步请求,批处理作业在一系列数据上执行相同的操作,数学算法可以分节成多个组成部分,诸如此类。 本章探讨的主题是,如何挖掘出 Java 线程和同步设施的最大性能。

Java性能调优12——原生内存最佳实践

在Java应用中,堆消耗的内存是最多的。但是除堆之外,JVM还会分配并使用大量的原生内存。上一章从编程的角度探讨了高效管理堆的不同方式,不过,堆的配置以及堆如何与操作系统的原生内存交互,是影响应用程序整体性能的另一个重要因素。

Java性能调优11——堆内存最佳实践(下)

关于内存管理,要大篇幅讨论的第二个主题是对象生命周期管理。在很大程度上,Java 会尽量减轻开发者投入到对象生命周期管理上的精力:开发者在需要的时候创建对象,当不再需要这些对象时,它们会走出作用域,并由垃圾收集器释放。 有些情况下,正常的生命周期并不是最优的。有些对象创建的成本很高,而管理这些对象的生命周期可以改进应用的效率,即便以让垃圾收集器多做些工作为代价。本节将探索正常的生命周期何时应该有所改变,以及如何改变,手段可以是重用对象,或者是维护指向这些对象的特殊引用。
Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×