我应该使用32位还是64位JVM?

这是我在企业软件开发生涯中多次遇到的问题。 我不得不每隔一段时间就提供有关配置特定新环境的建议。
而且,很多时候,手头的问题与“我应该使用32位或64位JVM”有关。 老实说,一开始我只是掷硬币。 而不是给出合理的答案。 (对不起,兄弟!)但是到目前为止,我已经对此进行了更多的了解,并希望与您分享。 第一站–越多越好。 对? 所以–当64> 32时,这很容易 32 or 64 bit 答:如果可能,请始终选择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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio点击图片,如何在Android Studio中的模拟器图库中添加图像?

如何在Android Studio中的模拟器图库中添加图像?我正在开发图像过滤器应用程序。 但是,如果我没有任何图像,就无法真正尝试。我知道我可以在电话中对其进行测试,但这并不相同,因为我需要错误消息和其他内容。我只想从A…

android移动应用基础教程源代码,Android移动应用基础教程 【程序活动单元Activity】...

本章目录一、Activity的生命周期1、生命周期状态2 、生命周期方法3、横竖屏切换时的生命周期二、Activity的创建配置和关闭1、Activity的创建2、配置Activity3、开启和关闭Activity三、Intent与IntentFilter1、Intent介绍1.1 意图的概念1.2 显式意图1.3 隐式意图2、IntentFilte…

Python中使用subplot在一张画布上显示多张图

subplot(arg1, arg2, arg3) arg1: 在垂直方向同时画几张图arg2: 在水平方向同时画几张图arg3: 当前命令修改的是第几张图 t np.arange(0,5,0.1) y1 np.sin(2*np.pi*t) y2 np.sin(2*np.pi*t) plt.subplot(211) plt.plot(t,y1,b-.) plt.subplot(212) plt.plot(t,y2,r--) plt.s…

Java 8:从PermGen到元空间

您可能已经知道,现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的一些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation(PermGen)空间。例如,自JDK 7起&…

浏览器缓存问题原理以及解决方案

浏览器缓存问题: 简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时…

Scikit-Learn机器学习入门

现在最常用的数据分析的编程语言为R和Python。每种语言都有自己的特点,Python因为Scikit-Learn库赢得了优势。Scikit-Learn有完整的文档,并实现很多机器学习算法,而每种算法使用的接口几乎相同,可以非常快的测试其它学习算法。 Pa…

Apache Camel入门

在先前的博文中,我们了解了企业集成模式(EIP)。 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架。 关于骆驼: Apache Camel是一个开放源代码项目,已有将近5年的历史,…

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申请Mob的appkey与appsecret2.在Mob官网下载最新SDK,解压后会看到以下目录结构:SMSSDK下存放的是短信SDK的全部内容。3.在android studio中加入SMS的第三方库AS版本的SMSSDK目录下包含以下内容:MobCommons.jar:Mob …

JavaScript总结(3)

第3章 获取用户的输入 <script>10 intAprompt("请输入第一个数字","");11 intBprompt("请输入第二个数字",27);默认是2712 document.write("你输入的第一个数字是"intA);13 document.write("<…

android listview 开发,android开发之ListView实现

今天又初步学习了一下ListView控件,看看效果如下:LisViewActivity.java源码:package com.jinhoward.UI_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundl…

Less 的用法

1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网:http://nodejs.cn/ 在命令行检验是否安装成功 切换到项目目录,初始化了一个package.json文件 安装与卸载jQuery包(例子) 安装 卸载 安装淘宝…

浅谈springboot整合ganymed-ssh2远程访问linux

环境介绍 技术栈 springbootmybatis-plusmysqlganymed-ssh2 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户…

android pick file,LFilePicker---文件选择利器,各种样式有它就够了

LFilePicker在 Android 开发中如果需要选择某个文件,可以直接调取系统的文件管理器进行选择,但是无法保证各个厂商的手机界面一致,而且解析Uri 还比较繁琐,如果还需要多选呢?需要文件类型过滤呢?老板说界面…

在JVM之下–类加载器

在许多开发人员中,类加载器是Java语言的底层,并且经常被忽略。 在ZeroTurnaround上 ,我们的开发人员必须生活,呼吸,饮食,喝酒,并且几乎与类加载器保持亲密关系,才能生产JRebel技术&a…

matplotlib绘制饼状图

源自http://blog.csdn.net/skyli114/article/details/77508430?ticketST-41707-PzNbUDGt6R5KYl3TkWDg-passport.csdn.net pyplot使用plt.pie()来绘制饼图 1 import matplotlib.pyplot as plt 2 labels frogs, hogs, dogs, logs 3 sizes 15, 20, 45, 10 # [15,20,45,10…

自适应宽度元素单行文本省略用法探究

单行文本省略是现代网页设计中非常常用的技术,几乎每个站点都会用到。单行文本省略适用于显示摘要信息的场景,如列表标题、文章摘要等。在响应式开发中,自适应宽度元素单行文本省略容易失效不起作用,对网页开发这造成困扰。因此&a…

P3390 【模板】矩阵快速幂

题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n1行,每行n个数,第i1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数&…

c#精彩编程200例百度云_永安市教育局被授予“人工智能编程教育试验区”

11月28日,“第二届人工智能与机器人教育大会青少年人工智能与编程教育主题论坛”在厦门召开。永安市教育局被中国教育发展战略学会人工智能与机器人教育专委会授予“人工智能编程教育试验区”牌匾,巴溪湾小学、西门小学、三中、一中附属学校、实验小学等…

Spring Data JPA和分页

让我们从支持分页的经典JPA方法开始。 考虑一个简单的域类–一个具有名字,姓氏的“成员”。 为了支持在成员列表上进行分页,JPA方法是支持一种查找器,该查找器将获取第一个结果(firstResult)的偏移量和要检索的结果&am…

Windows环境下安装、卸载Apache

安装Apache 服务 打开 Apcahe的目录 ,打开bin目录, 如:E:\wamp\Apache24\bin ,打开目录,Shift键 鼠标右键 , 点击 在此处打开命令窗口或者W快捷键直接到此处, 也可以Window键r,输入…