这是我在企业软件开发生涯中多次遇到的问题。 我不得不每隔一段时间就提供有关配置特定新环境的建议。
而且,很多时候,手头的问题与“我应该使用32位或64位JVM”有关。 老实说,一开始我只是掷硬币。 而不是给出合理的答案。 (对不起,兄弟!)但是到目前为止,我已经对此进行了更多的了解,并希望与您分享。 第一站–越多越好。 对? 所以–当64> 32时,这很容易 答:如果可能,请始终选择64位? 好吧,抱着你的马。 64位体系结构的缺点是相同的数据结构会消耗更多的内存。 多很多。 我们的测量表明,根据JVM版本和操作系统版本以及硬件体系结构,最终使用的堆比32位多使用30-50%。 较大的堆还可能导致较长的GC暂停,从而影响应用程序延迟-在4.5GB的堆上运行完整的GC肯定比在3GB的堆上花费更长的时间。 因此,仅仅因为64比32大就跳到64位潮流上是不正确的。

但是……您什么时候才想要使用64位JVM? 在大多数情况下,原因是堆大。 在不同的体系结构上,您很快就会遇到32位体系结构上最大堆大小的限制。 下面说明了不同平台上的这些限制:

操作系统 最大堆 笔记
的Linux 2GB 在特定的内核上有3GB的空间,例如hugemem
视窗 1.5GB 带有“ / 3GB”启动标志和通过/ LARGEADDRESSAWARE开关编译的JRE的最大3GB)
Mac OS X 3.8GB 警报-找不到古老的Mac,因此未经我测试

现在怎么这么糟? 毕竟,我敢打赌,您已经看到32位计算机在16G + RAM上运行并且运行良好。 JVM在Windows上分配的内存不足此16G的10%怎么了?

主要原因–地址空间。 理论上,在32位系统中,每个进程最多可以分配4GB的内存。 在Windows上打破这一点的是如何处理进程地址空间。 Windows将进程地址空间减少一半。 其中一半保留给内核(用户进程无法使用),另一半保留给用户。 盒子中有多少RAM无关紧要,一个32位进程只能使用2GB RAM。 更糟糕的是,该地址空间必须是连续的,因此在实践中,Windows机顶盒通常只剩下1.5-1.8GB的堆空间。

您可以使用32位窗口来减少内核空间并增加用户空间,这是一个技巧。 您可以在boot.ini中使用/ 3GB参数。 但是,要实际利用此机会,必须使用/ LARGEADDRESSAWARE开关来编译/链接JVM。

不幸的是,至少对于Hotspot JVM并非如此。 直到最新的JDK 1.7版本,才使用此选项编译JVM。 如果您在2006年后版本的jRockit上运行,则更加幸运。 在这种情况下,您可以享受高达2.8-2.9GB的堆大小。

那么–我们可以得出结论,如果您的应用程序需要超过2-3GB的内存,那么您应该始终在64位上运行吗? 也许。 但是您也必须意识到这些威胁。 我们已经介绍了罪魁祸首–增加了堆消耗,并延长了GC暂停时间。 让我们在这里分析原因。

问题1:在64位上需要30-50%的更多堆

为什么这样? 主要是由于64位体系结构中的内存布局。 首先–在64位JVM上,对象标头是12个字节。 其次,对象引用可以是4个字节,也可以是8个字节,具体取决于JVM标志和堆的大小。 与32位标头上的8个字节和引用标本上的4个字节相比,这无疑增加了一些开销。 您还可以深入研究我们的较早文章之一,以获取有关计算对象的内存消耗的更多信息。

问题2:较长的垃圾收集暂停时间

建立更多的堆意味着GC在清除未使用的对象时还有更多工作要做。 在现实生活中,这意味着在构建大于12-16GB的堆时,您必须格外小心。 无需进行微调和测量,您就可以轻松引入几分钟的完整GC暂停时间。 在延迟不是很关键并且您可以优化吞吐量的应用程序中,这可能没问题,但是在大多数情况下,这可能会成为热门。

那么,当我需要更大的堆并且不希望引入由64位体系结构引起的开销时,该怎么办? 在我们较早的博客文章中 ,我们介绍了几种技巧–您可以通过堆分区,GC调整,在不同的JVM上构建或在堆外分配内存来摆脱困境。

最后,让我们重申一下,您应该始终了解选择64位JVM的后果。 但不要害怕此选项。

参考: 应该使用32位还是64位JVM? 从我们的JCG合作伙伴 Vladimir Sor在Plumbr Blog博客上获得。

翻译自: https://www.javacodegeeks.com/2012/12/should-i-use-a-32-or-a-64-bit-jvm.html

我应该使用32位还是64位JVM?相关推荐

  1. python 64位程序 打包用于32位系统_python分别打包出32位和64位应用程序

    由于我们分发的python应用可能运行在64位环境,也可能运行在32位环境,所以我们需要为同一套应用代码配置两套打包环境,怎么配置? 步骤如下 1,在电脑上分别下载安装32位和64位的python,安 ...

  2. 查看linux机器是32位还是64位的方法

    查看linux机器是32位还是64位的方法: 1.方法1: file /sbin/init 或者 file /bin/ls /sbin/init: ELF 64-bit LSB executable, ...

  3. 32位dll注入到64位程序_你用的32位还是64位?有什么区别呢?

    (给程序员零距离加星标,了解项目开发.) 粉丝福利:小编会从今天留言中抽选3名小伙伴赠送现金红包,感谢大家一直以来的支持!文末见喽!通过前面两篇文章的学习,外甥对电脑的产生了各种好奇,差点把自己电脑拆 ...

  4. Linux系统查看系统是32位还是64位方法总结 in 创新实训

    这篇博客是总结.归纳查看Linux系统是32位还是64位的一些方法,很多内容来自网上网友的博客.本篇只是整理.梳理这方面的知识,方便自己忘记的时候随时查看. 方法1:getconf LONG_BIT ...

  5. 一台计算机有64,在同一台计算机上使用带有32位和64位Altium设计软件的数据库元件库...

    数据库元件库(DbLibs)是一种流行且强大的元器件管理解决方案.但是,将Microsoft Access用作元器件的后端数据库时,使用Altium设计软件的32位和64位版本之间有一个重要区别: 6 ...

  6. linux c va_list 32位和64位的差异

    在将程序从32位机器移植到64位机器的过程中经常出现一些奇奇怪怪的错误,这里记录一下在使用可变参数的过程中导致在32位机器上正常运行的程序移植到64位机器上之后出现段错误的发现过程以及解决方案. 首先 ...

  7. C++ 32位和64位

    C++32位和64位程序的区别 原文地址: https://blog.csdn.net/nma_123456/article/details/45077345 由于操作系统内存分配的不同,导致软件开发 ...

  8. 服务器系统都是64位的吗,云服务器32位跟64位的区别吗

    云服务器32位跟64位的区别吗 内容精选 换一换 Windows操作系统与Linux操作系统没有好坏之分,只有适合不适合.请根据业务需求选择Windows或Linux的操作系统.华为云提供了5个版本, ...

  9. 查看Eclipse32位还是64位以及Eclipse的编译版本号,查看JDK是32位还是64位

    一.查看Eclipse是32位还是64位 首先进入到Eclipse的安装目录: 查找到文件名为"eclipse.ini" 文件,使用文本编辑工具,或记事本打开,如下图: 以上是查看 ...

  10. 64 大小_电脑系统32位和64位有什么区别

    众所周知,windows系统有32位和64位,但这两者有什么不同呢?什么样的电脑装什么版本的呢?笔者就简单的来讲一下两者的区别. 一.支持的内存不同 32位的操作系统,最多支持4G的内存,实际内存为3 ...

最新文章

  1. PhoneGap揭开你的神秘面纱
  2. 超图三维数据处理学习摘要1
  3. python 字符串join
  4. codeblocks调试窗口字体大小以及修改主题
  5. mysql配置和管理(转载)
  6. mysql linux内核_mysql 5.7.15 vs mysql 5.6.31性能测试以及不同linux内核性能比较
  7. MySQL集群---①浅谈MySQL集群原理
  8. c语言程序电子词典,C语言及程序设计进阶例程-14 开发一个电子词典
  9. 金蝶K3系统上机日志如何清除
  10. 微信新功能曝光:定时发送消息
  11. Alpha版本冲刺(五)
  12. eclipse neon配置 maven
  13. Unity的摄像机拉近拉远和旋转脚本实现
  14. 360全景拼接 opencv_GitHub - hellojiawa/AndroidPanoDemo: 使用Opencv全景照片拼接
  15. openresty中应用murmurHash
  16. 数据增强算法SMOTE的实验结果分析
  17. BEVFusion(北大阿里)环境搭建教程
  18. 交换机口不够用能再加一个吗_实现交换机网线延长250米的两种方式,掌握后能避免踩雷...
  19. 分布有限传输速度高的计算机网络,第5章 计算机网络基础ppt课件.ppt
  20. 人工智能数学核心理论34讲精华视频免费领(微积分、概率论与数理统计、线性代数三部曲)

热门文章

  1. kali安装python3.7_Debian服务器之安装Python3.7
  2. 使用互联网了解的两个月里_我两个月来对Quarkus的了解
  3. json解析适配模板_认识适配器:JSON绑定概述系列
  4. java登录界面命令_Java命令行界面(第18部分):JCLAP
  5. java 存储数据到文件中_本机速度文件支持的“纯” Java大数据存储
  6. xp系统 javafx_使用JavaFX构建React系统
  7. finally块_如何从finally块访问方法的结果值
  8. 内核中断处理流程_处理中断
  9. fork join框架_Fork / Join框架vs.并行流vs.ExecutorService:最终的Fork / Join基准
  10. 组织机构代码输入测试用例_测试代码以用于过大的输入