32和64位jvm

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

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

操作系统 最大堆 笔记
的Linux 2GB 在特定的内核(例如ugemmem)上为3GB
视窗 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

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

  1. openssl在64位的机器上编译32位的库

    64位的linux机器编译32位的openssl # tar -xzf openssl-1.0.2f.tar.gz # cd openssl-1.0.2f # mkdir /usr/local/ope ...

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

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

  3. 64位内核第一讲,和32位内核的区别

    64位内核第一讲,和32位内核的区别 双击调试配置请查看 连接: https://www.cnblogs.com/aliflycoris/p/5877323.html 一丶编译的区别. 首先,还是使用 ...

  4. 计算机哪里看到32位还是64位,如何看电脑是32位还是64位?

    哪里看电脑系统是32位还是64位?windows系统有32位和64位两种不同的位数,在安装软件的时候,也会有所选择,不少朋友不知道怎么查看自己电脑的位数 Win10查看方法: 方法一: 1.在桌面上, ...

  5. 如何在64位的Linux中运行32位的应用程序

    大部分Linux发行套件都有针对x86_64处理器的版本.比较典型的x86_64的处理器有ADM Athlon II和英特尔Xeon.因为这些Linux发行套件都有自己专用的软件源,这些软件源会为提供 ...

  6. Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法

    Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法 引用功能被关闭了. 苹果电脑 Mac OS X 10.6 雪豹系统同时支持 32 位和 64 ...

  7. 64位处理器_电脑系统32位好还是64位好 哪个快?

    1.运算速度不同.电脑CPU运算使用的是二进位制,O和1,一个O或一个1叫一位,8个位组成一个字节,2个字节组成一个标准汉字,处理的位数越高,表明其运算速度越快.通常我们说的64位32位是指的处理器( ...

  8. 64位处理器_电脑操作系统的32位和64位有什么区别

    想买个新电脑,不知道买 64 位还是 32 位?买了一套视频剪辑软件,发现电脑根本安装不了?这些到底是为什么? 对于 Windows7 及以上版本,我们能够很明显知道自己电脑操作系统是 64 位还是 ...

  9. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多

    前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...

最新文章

  1. “AI明星”第四范式C轮融资超10亿元,估值约12亿美元
  2. idea不区分大小写设置_我的 IntelliJ IDEA 一直都是这么设置的,效果很棒!
  3. Cookie和Session-学习笔记03【Session快速入门、Session细节】
  4. 彻底搞清楚浏览器渲染过程
  5. java中如何将数字转换成字符串(int转换为string)
  6. Spring.Net---4、IoC/DI注入方式
  7. java 与 php 区别或异同(整理、整合)
  8. 父与子的python之旅_《父与子的编程之旅:与小卡特一起学Python》作者:Warren Sande - kindle电子书下载 - 我的书库...
  9. nema0183 java解析_java解析nmea0183协议
  10. win和linux同步文件,Linux和windows系统文件的实时同步
  11. ibm是被联想收购了吗_联想集团收购IBM背后的苦
  12. sklearn.neighbors.KNeighborsClassifier函数详解
  13. 2021年最受数据分析师欢迎的副业排行榜TOP1
  14. linux 查看gz文件,【shell 脚本】查看*.gz 文件的内容
  15. 封装Python脚本:使用企业微信机器人发送消息至企业微信
  16. 【面经——广州道一云+笔试+一二三面+HR面+offer】
  17. git excel冲突_Excel宏名称冲突
  18. EBS 客户表结构学习(转载)
  19. 机器学习与计算机视觉入门项目——视频投篮检测(三)
  20. 我家云/粒子云 影音娱乐服务器-不掉盘-风扇转-LED亮-可关机-smb高速读写

热门文章

  1. 扫盲,为什么分布式一定要有Redis?
  2. Oracle入门(十四B)之PL/SQL异常处理
  3. 20 个使用 Java CompletableFuture的例子
  4. jstack命令:教你如何排查多线程问题
  5. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
  6. 2015蓝桥杯省赛---java---A---1(熊怪吃核桃)
  7. vue项目没有启动成功的原因之一
  8. python中seaborn画swarm图_Python可视化 | Seaborn5分钟入门(四)——stripplot和swarmplot
  9. openjdk-7支持版本_长期支持对OpenJDK意味着什么?
  10. java创建和销毁一个对象_有效的Java –创建和销毁对象