JVM优化之逃逸分析与分配消除

在Java Magazine的前几期文章中,我们介绍了just-in- time (JIT) 编译技术的一些理论基础,以及如何使用Java Microbenching Harness(JMH)和开源工具JITWatch来进行可视化分析,以便搞清楚HotSpot VM的内部机制。在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技术,它可以用来实现某些特殊的优化,后续我们也会分析下这些优化。在开始之前,你只需要掌握一些HotSpot JVM的基本工作原理就可以了。

Published: 11 Jul 2019

JVM优化之逃逸分析及锁消除

逃逸分析——我们在上一篇文章中所介绍的由编译器完成的一项的分析技术——使得删除锁的优化成为了可能。如果它能确认某个加锁的对象不会逃逸出局部作用域,就可以进行锁删除。这意味着这个对象同时只可能被一个线程访问,因此也就没有必要防止其它线程对它进行访问了。这样的话这个锁就是可以删除的。这个便叫做锁消除,本文是JVM实现机制的系列文章,这也正是今天要讲的主题。

Published: 09 Jul 2019

JVM优化之循环展开(附有详细的汇编代码)

在JVM内部实现系列的前几篇文章中,我们已经看到了Java的HotSpot虚拟机的just-in-time (JIT)编译技术,包括逃逸分析和锁消除。本文我们将要讨论另一种自动优化,叫作循环展开。JIT编译器使用这项技术来让循环(比如Java的for或者while循环)执行得更加高效。

Published: 05 Jul 2019

Java 12中新的switch表达式

JDK 12已经于19年3月发布了。这是Java 9发布时宣称采用6个月作为一个发布周期以来的第三个版本。这次又给我们带来了什么新东西?本文主要想介绍下预览模式下的一个新的语言特性:switch表达式。下篇文章我们会讲下JDK的变化,包括G1及Shenandoah垃圾回收器。

Published: 02 Jul 2019

如何避免分布式支付系统中重复支付的问题(Airbnb)

背景

Published: 30 Jun 2019

kubernetes还是docker

随着kubernetes作为一种容器编排方案的日渐流行,关于“kubernetes还是docker”的比较之声也逐渐不绝于耳。

Published: 26 Jun 2019

GC算法基础

GC算法:基础篇

Published: 09 Jul 2016

Java中的垃圾回收

前文中对标记删除算法的介绍更多还是偏理论性质的。实践中,为了更好地满足现实的场景及需求,还需要对算法进行大量的调整。举个简单的例子,我们来看下JVM需要记录哪些信息才能让我们得以安全地分配对象空间。

Published: 09 Jul 2016

弱引用,软引用及虚引用对GC的影响

在应用程序中使用非强引用会导致一系列的问题,对GC的响应时间及吞吐量都会有所影响。尽管这类引用在某些场景下可以减少OutOfMemoryError的出现频率,但过度的使用则会严重影响到垃圾回收,从而导致应用程序的性能遭受影响。

Published: 17 Dec 2015

提升Java的锁性能

Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在。

Published: 21 Jul 2015