GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

Java 7 Update 1 的性能和稳定性

2011 年 12 月 15 日

Oracle 于 10 月 18 日发布了 Java 7 Update 1 ,给 Java 7 带来了迫切需要增强的稳定性,并且修复了我们以前报道过的HotSpot 编译器的性能优化问题,这个问题偶尔会导致错误结果甚至导致 SIGSEV 崩溃。JDK 6 Update 29 在使用不推荐用于生产服务器的参数 XX:+AggressiveOpts 或者 -XX:+OptimizeStringConcat 时,也存在相同的问题,这在此次更新中也得到了修复。

Java HotSpot 虚拟机性能增强文档中,Oracle 描述了其他一些与性能相关的特性。这份简短的文档只包含一项改进:-XX:+TieredCompilation。

分层编译在早先编译器的混合模式行为上增加了额外的一步。服务器会先对 JVM 分级,然后 Java 7 才会在解释模式下运行代码。然后代码只会在“热”的时候才被编译和优化,并被 HotSpot VM 标记,比如说有较高的执行次数。解释模式无论如何都比运行编译后的代码慢很多。-XX:+TieredCompilation 让虚拟机可以在已经运行编译后代码的同时,收集用于优化的统计信息。

尽管这项改变可能会减少高动态性系统的预热时间,其中节点会不断地与服务器连接,但是它带来的改进并不十分明显,就像桌面或者 applet 程序的启动没那么重要一样。

以下列出的针对 JVM 7 的改进对于 Java 6 都已经生效:

  • _Compressed Oops_ 自 Java 6 Update 14 有效,自 Update 23 成为默认设置(仅 64 位)
  • _Escape Analysis_ 自 Java 6 Update 14 有效,自 Update 23 成为默认设置
  • _ 非统一内存访问垃圾回收(Non Uniform Memory Access Garbage Collection)_ 自 Java 6 Update 2 有效

Compressed Oops 会为 64 位地址的 JVM 节省内存。JVM 将使用更简短的地址来引用与堆起点相关的对象,而不是从操作系统获得 64 位内存地址。由于减少了对象引用的内存使用,大多数程序都会受益于这项特性。

Escape Analysis 会查明新分配内存的对象是否要“脱离”当前方法的作用域。如果不是那样,那么该对象就可能会被分配在方法栈上,甚至同步可能会被移除(锁省略)。Heinz Kabutz 就该项优化的效果有一篇全面的文章

非统一内存访问垃圾回收是一项很有意义的改进,其实已经存在很长一段时间了。在现代内存架构中,有一些内存区比别的内存区的读写操作快。特别是在多核系统中,有些内存是专为个体CPU 保留的。感兴趣的读者可以从 Ulrich Drepper 优秀的文章中更多地了解这些内存区。JVM 将尝试在执行分配内存线程的核所使用的内存中分配对象的内存。该性能改进要求很高(特别是在 Solaris 机器上),但是 -XX:+UseNUMA 选项从来都不是默认的。

随着大部分改进在 Java 6 Updates 上可用(乃至成为默认项),Java 7 由于性能方面的原因依然没有吸引我们升级的亮点。

查看英文原文: State of Performance and Stability in Java 7 Update 1

2011 年 12 月 15 日 01:253981

评论

发布
暂无评论
发现更多内容

synchronized只会用不知道原理?一文搞定

Java鱼仔

Java 面试 并发 synchronized

在时间的缝隙里打了个盹「幻想短篇 4/28」

道伟

28天写作

技术人小故事-团队愿景篇-第4段

Ian哥

28天写作

扫盲帖:聊聊微服务与分布式系统

AI乔治

Java 架构 微服务 分布式系统

记录一下我离线依赖迁移安装的具体尝试过程

blueju

JavaScript 前端 npm Node webpack

读《关于中台的思考与尝试》,我竟然懂得了这么多!

李忠良

中台 方法论

Spring Boot 使用slf4j进行日志记录

武哥聊编程

Java springboot SpringBoot 2 slf4j 28天写作

房子是程序员的印钞机和救生舱

陆陆通通

赚钱 程序人生 买房 逆袭 28天写作

精选算法面试-队列

李孟

算法 队列 28天写作

Synchronized 精讲

伯阳

Java 多线程 高并发 synchronized java关键字

漫谈分层架构:为什么要进行架构分层?

AI乔治

Java 架构 高可用系统的架构 高可用架构

我与你地铁高峰期的邂逅,背后竟然是?

脑极体

[2/28]保障业务转化为开发需求

俊毅

【Mysql-InnoDB 系列】锁

程序员架构进阶

MySQL innodb 28天写作

我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?

冰河

分布式 微服务 dubbo 系统架构 服务治理

原理竟然是这!GitHub上标星13k的《Android面试突击版》,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

数仓建设中最常用模型--Kimball维度建模详解

五分钟学大数据

大数据 数据仓库 数仓 维度建模

异步I/O -- posix aio 从入门到放弃的吐血实践

1412

workflow srpc 异步调度 posix aio kqueue

外行话之什么是好的游戏角色

Justin

28天写作 外行话 游戏设计

关于选择的复盘(part 1)

.

28天写作

网线如何制作和如何使用?

【薪火计划】11 - 学习总结

brave heart

管理 28天写作

不可多得的干货!耗时两个礼拜,8000字安卓面试长文,内含福利

欢喜学安卓

android 程序员 面试 移动开发

三分钟快速详细安装CentOS

程序员的时光

Linux centos 程序员 28天写作

自动驾驶到底应该怎么实现?(28天写作 Day4/28)

mtfelix

自动驾驶 28天写作 智能电动车

CSS ( Cascading Style Sheets )

roadup

CSS

Spring5.0源码学习系列之Spring AOP简述

AI乔治

Java spring 架构

28 天带你玩转 Kubernetes-- 第四天(资源介绍)

Java全栈封神

Kubernetes k8s 28天写作 k8s教程 k8s资源

影响DevOps和DevSecOps采用的7种趋势

啸天

安全 DevSecOps 应用安全

突然明白 npm install xxx 的业务实际用处

blueju

前端 npm

甲方日常 83

句子

工作 随笔杂谈 日常

Java 7 Update 1的性能和稳定性-InfoQ