我应该使用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,一经查实,立即删除!

相关文章

python安装pyecharts清华_基于Python安装pyecharts所遇的问题及解决方法

最近学习到数据可视化内容,老师推荐安装pyecharts,于是pip install 了一下,结果...掉坑了,下面是我的跳坑经验,如果你有类似问题,希望对你有所帮助。第一个坑:这个不难理解,缺少pyecharts-jupyt…

C语言内存分配

C语言内存分配 C语言的内存分配主要有5个区域: 1、栈区:在运行函数时,函数内的局部变量(不包含static变量)、函数返回值的存储单元在栈区上创建。函数运行结束时这些存储单元自己主动被释放。栈区内存分配运算内置于处…

在Ajax方式产生的浮动框中,点击选项包含某个关键字的选项

#!usr/bin/env python #-*- coding:utf-8 -*- """ author: sleeping_cat Contact : zwy24zwy163.com """ #在Ajax方式产生的浮动框中,点击选项包含某个关键字的选项 #通过模拟键盘下箭头进行选择悬浮框选项from selenium imp…

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

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

移动端学习目录

前面的话 iphone4发布是几年前的事情,而如今早已是移动互联网的时代。人们不再正襟危坐在电脑前,而更愿意把时间耗费在手机上,随时随地地享受互联网。在移动端可以使用最新最炫的前端技术,而不用再考虑老版本IE的兼容性。当前&…

实践中的构建者模式

我将不深入讨论该模式,因为已经有大量的帖子和书籍对此进行了详细的解释。 相反,我将告诉您为什么以及何时应该考虑使用它。 但是,值得一提的是,这种模式与《 四人帮》一书中介绍的模式有些不同。 虽然原始模式着重于抽象化构造步…

python计算汽车的平均油耗_用python对汽车油耗进行数据分析

原标题:用python对汽车油耗进行数据分析- 从http://fueleconomy.gov/geg/epadata/vehicles.csv.zip下载汽车油耗数据集并解压- 进入jupyter notebook(ipython notebook)并新建一个New Notebook- 输入命令[python]view plaincopyimportpandas as pdimportnumpy as np…

git常用命令2

##一、git常用命令 ###1、 push文件 * 打开cmd窗口 * 输入f:,进入f:(自己随便在自己的电脑上找个位置就行了,这里的f:,表示的是f盘) * 然后输入mkdir workSpace,会自动在f盘下生成一个workSpace文件夹 * 然…

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

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

elasticsearch中cluster和transport知识

elasticsearch cluster 概述 elasticsearch节点间通信的基础transport转载于:https://www.cnblogs.com/wzj4858/p/8126033.html

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起&…

oracle symonym_ORACLE SYNONYM详解

以下内容整理自Oracle 官方文档一 概念A synonym is an alias for any table, view,materialized view, sequence, procedure, function, package, type, Java classschema object, user-defined object type, or another synonym. Because a synonymis simply an alias, it re…

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

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

Scikit-Learn机器学习入门

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

hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积

题目链接&#xff1a;点击打开链接 题目描写叙述&#xff1a;给定一些矩形&#xff0c;求这些矩形的总面积。假设有重叠。仅仅算一次 解题思路&#xff1a;扫描线线段树离散&#xff08;代码从上往下扫描&#xff09; 代码&#xff1a; #include<cstdio> #include <al…

浏览器滚动条 --- 自定义“衣裳”

由于种种原因&#xff0c;浏览器的默认滚动条“衣裳”实在是 (ˉ▽&#xffe3;&#xff5e;)~~&#xff0c;为了“美”&#xff0c;本人结合万维网各大神给的经验和自己的实践&#xff0c;做了此篇总结。若有错误&#xff0c;请在评论里给出&#xff0c;我会及时更改。 我在电…

电脑调分辨率黑屏了怎么办_调显示器分辨率黑屏怎么办

调显示器分辨率黑屏怎么办调显示器分辨率黑屏解决方法&#xff1a;1&#xff0c;开机&#xff0c;当快要进入系统选项时&#xff0c;立即按f8键进入“高级模式”&#xff0c;因为系统选项界面显示的时间非常短&#xff0c;可以提早按f8键&#xff0c;否则错过时机就得重来。2&a…

什么是JNDI,SPI,CCI,LDAP和JCA?

JNDI代表Java命名和目录接口 。 它是用于提供对目录服务&#xff08;即带有对象的服务映射名称&#xff08;字符串&#xff09;&#xff0c;对远程对象或简单数据的引用&#xff09;的访问的API。 这就是所谓的 约束力 。 绑定集称为上下文 。 应用程序使用JNDI接口访问资源。…

android studio gradle 学习,学习Android Studio里的Gradle

一直听说Gradle很强大&#xff0c;只是偶尔用Android Studio创建Demo的时候看到他一次&#xff0c;今天抽个时间完整记录一下。1.gradle位置Android Studio项目创建好之后&#xff0c;默认有3个gradle文件&#xff0c;分别位于&#xff1a;/settings.gradle/build.gradle/app/b…