Java中的逃逸分析

底层的CPU优化对我们的应用有影响。此外,它们证明了大多数程序员的错觉是错误的。是的,你使用的是高级语言。但这并不意味着所有这些抽象层都能完全屏蔽CPU。我在一个Java程序上演示了CPU缓存的效果。

CPU的发展速度比主存快得多。如今,CPU大部分时间都在等待。现代CPU可以在每个CPU周期执行多条指令。但如果它必须访问主内存,绕过三个缓存中的每一个,它必须等待大约100个周期。

Java中的逃逸分析

自Java6以来,JVM使用了一种完全惊人的优化技术来减少内存占用。有趣的是,围绕这项技术有很多城市神话。他们说逃逸分析是一种将内存从堆转移到堆栈的工具。这是胡说八道,但这是有趣的胡说八道,所以我将在本文中介绍这个想法。

事实证明,逃逸分析并不是一种优化技术。它“只是”一个分析工具,可以进行有趣的优化。Escape analysis检查变量,查看其使用位置,并检测其是否在特定范围外使用。如果它没有超出这个范围,我们知道它是一个局部变量,我们可以更仔细地检查它。仅在有限范围内使用的变量允许进行许多优化。

锁省略

这些优化之一是锁省略。你有没有遇到过多个线程访问一个公共变量的问题?如果是这样的话,您可能会用一个同步块来包围程序的许多部分。有时你甚至不得不这么做,因为你不知道你的方法将如何被使用。 StringBuffer 实现的一个经典示例。StringBuffer的方法经常使用 synchronized ,以防万一:

public synchronized int length() {
  return count;
}

事实是,几乎每个应用程序都以单线程方式使用 StringBuffer 。换句话说,获取锁并保护 StringB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值