CompressedOops:Java压缩参考简介

在本文中,我们将向您介绍一种称为Compressed oops的JVM优化。 压缩oop的概念是由32位和64位体系结构之间的差异引起的。 因此,我们将对64位体系结构进行简短的回顾,然后再深入探讨压缩oop的主题。 最后,我们将通过一个简单的示例看到所有这些。

本文的示例代码非常简单,因此我们将不使用任何IDE。 在32位计算机上,压缩oop没有任何意义。 同样,在6u23之前的JDK中,默认情况下未激活它。 因此,我们假设您使用的是比6u23更新的64位JDK。 我们需要的最后一个工具是内存分析器工具。 在此示例中,我们使用了行业标准的Eclipse Memory Analyzer Tool版本1.5。

1. 32位和64位

32位与64位在2000年代初风靡一时。 尽管64位CPU在超级计算机领域并不是什么新鲜事物,但直到最近,个人计算机才将其推向主流。 从32位架构过渡到64位绝非易事,从硬件到操作系统的所有事物都必须改变。 Java通过引入64位虚拟机来拥抱这种转变。

这种过渡的主要优势是存储容量。 在32位系统中,您的内存地址宽度为32位(因此称为名称),这意味着可寻址内存的总量为2 ^ 32或4 GB RAM。 过去,这可能是一台个人计算机的无限内存(毕竟,那些需要超过640kB RAM的内存!),但在拥有1 GB内存的智能手机被认为是低端产品的时候,却不是。 64位体系结构解决了此限制。 在这样的机器中,可寻址内存的理论数量为2 ^ 64,这是一个非常大的数字。 不幸的是,这只是一个理论上的上限,在现实世界中,有很多硬件和软件因素将我们限制在较小的内存上。 例如,Windows 7 Ultimate仅支持最大192GB。 仅将单词用于192 GB似乎有些苛刻,但与2 ^ 64相比,它显得苍白。 现在您已经了解了为什么64位很重要,让我们进入下一部分,看看压缩的oop将如何帮助我们。

2.理论上的压缩

“没有免费的午餐之类的东西”。 64位计算机中过多的内存需要付出一定的代价。 通常,一个应用程序在64位系统上会消耗更多的内存,而在非平凡的应用程序中,这个数量是不可忽略的。 压缩的oop通过在64位环境中使用32位类指针来帮助您保留一些内存,前提是您的堆大小不会大于32 GB。 为了更详细地了解这一点,让我们看看如何用Java表示对象。

Java中的对象表示

为了查看Java中对象的表示方式,我们使用一个非常简单的示例,一个持有原始int的Integer对象。 当您编写如下简单的代码行时:

Integer i = new Integer(23);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值