`
javafxguy
  • 浏览: 151492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Linux系统中JVM内存2GB限制的原因

    博客分类:
  • java
阅读更多

(转载请注明出处:Java,JavaFX技术交流 http://javafxguy.iteye.com)

其它文章: Java虚拟机的调优参考  JavaFX 1.1和JavaFX 1.0的兼容性

接触到的一些用户反映在Linux系统中运行的Java应用,内存只能使用到2GB,在Java虚拟机中如果把-Xmx参数设置到2GB左右(约1.5-1.8GB),java进程就根本启动不了。我们通常使用的JVM都是32位的(64位的JVM会损失10-20%的性能,通常不建议使用),而32位程序的寻址空间应该是4GB才对,为什么Linux上的JVM只能使用2GB的内存呢? (注:Windows上也有类似的问题)

经过和JDK研发组的人员沟通,终于弄清楚了一些相关的原因。这个问题存在于早期的一些Linux版本中,特别是内核2.5以前的版本,2.6以后的版本就基本上没有这个问题了。原来这些Linux版本多是32位的,内核使用了2GB空间,应用进程就只有2GB了,也就是说一个地址连续的内存块大小的上限是2GB,而JVM的堆空间(heap size)需要连续的地址空间,因此,2GB就是java进程的理论使用的内存上限。

(转载请注明出处:Java,JavaFX技术交流 http://javafxguy.iteye.com)

如果java应用需要使用较大的内存,建议使用较新版本的linux,或者修改Linux的应用/内核内存比配置为3GB:1GB。还有就是选择如Solaris等的UNIX操作系统。象Solaris这样的操作系统,在内存管理上没有2GB的限制,因此可以把heap size设置到3.5-3.6GB左右。 

 

Computer Canadian Citizenship Test

分享到:
评论
2 楼 javafxguy 2009-04-15  
对,如果是较旧的Intel/AMD的CPU,因为体系架构上有寻址空间的限制,是不支持超过2GB的内存的。
1 楼 mikeandmore 2009-04-15  
嗯,话说,这个还是要看硬件吧。。。。
像MIPS32位就指明了说用户态只可能有2G内存。。。。

intel不清楚。。。不过超过4G本身就应该考虑64位地址空间了。。。

相关推荐

    解析Linux系统中JVM内存2GB上限的详解

    总结来说,Linux系统中JVM内存2GB的上限主要是由于32位系统的地址空间限制和早期内核版本的限制。随着技术的发展,这个问题在现代的64位Linux和某些UNIX系统中得到了缓解。通过系统配置、使用64位JVM或者选择支持更...

    JVM内存模型和垃圾收集.pdf

    - 在32位Linux系统下,最大堆大小通常不超过3GB。 - 64位系统则理论上没有限制。 - 初始堆大小可以通过`-Xms`参数设定,默认值通常为物理内存的1/64,但不会超过1GB。 - 最大堆大小通过`-Xmx`参数设定,默认同样...

    weblogic扩展JVM扩容

    在WebLogic服务器的应用场景中,随着业务量的增长,服务器可能会出现性能瓶颈,其中一种常见的问题是JVM内存不足导致服务中断。本文将详细介绍如何通过调整JVM配置来解决WebLogic服务器因内存限制而引发的服务中断...

    jvm调优,内存管理

    - **32位 vs 64位**: 在Linux环境下,32位JVM存在3GB的地址空间限制,因此建议将堆内存控制在2GB以下。而64位虽然指针占用内存更多,但在内存和CPU资源充足的情况下,通常推荐使用64位版本,并且应该启用`-XX:+...

    weblogic内存占用过大调优

    这些问题可能源于多个方面,包括但不限于:系统资源分配不合理、CPU使用率异常高、文件句柄限制过低、线程状态异常以及JVM的GC(垃圾回收)机制问题等。 #### 二、诊断与监控 1. **系统资源监控**: - 使用`top`...

    linux swap交换内存扩容的方法

    Linux交换内存(swap space)是Linux操作系统中一种特殊类型的存储空间,用于缓解物理内存不足的情况。当系统的物理RAM不足以运行所有进程时,Linux会将部分内存中的数据暂时移动到硬盘上的交换空间,以便为新的任务...

    遭遇OutOfMemoryError

    在IT领域,尤其是在Java开发中,`OutOfMemoryError`是一个常见的问题,通常表明程序在运行过程中耗尽...对于大型Java应用,了解JVM内存模型和操作系统内存管理是至关重要的,以便有效地优化性能并避免类似问题的发生。

    Dubbo线程模型(结合Linux线程数限制配置的实战经验分享).docx

    2. **计算普通用户的线程数限制**:线程数限制可以根据系统总内存来计算,一般推荐为总内存的1/128。例如,如果系统总内存为5993104KB(5.75GB),那么可以设置为5993104 / 128 = 46700个线程。 3. **使用`ulimit`...

    jdk1.6 linux版

    6. `jmap`:用于诊断和分析JVM内存的工具。 7. `jhat`:堆分析工具,与`jmap`配合使用。 8. `jvisualvm`:集成的多用途Java性能分析工具。 在JDK1.6中,Java平台标准版(Java SE)引入了一些关键特性,如改进的垃圾...

    linux64位版-jdk1.8-linux64位版

    2. **64位操作系统**: 64位操作系统可以处理更大的内存地址空间,允许程序访问超过4GB的物理内存,这对于处理大量数据或运行内存消耗大的应用至关重要。Linux的64位版本支持更大的计算能力和更高的性能。 3. **.tar...

    对pycharm 修改程序运行所需内存详解

    在开发过程中,特别是在使用Java开发环境中,经常会遇到因为内存限制导致的性能问题。PyCharm是一款非常受欢迎的集成开发环境(IDE),主要用于Python开发,但也可以通过配置来支持Java应用。本文将详细介绍如何在...

    kibana-7.9.3-linux-x86_64.rar

    3. 硬件资源:内存至少2GB,硬盘空间根据数据量而定。 二、下载与解压 首先,从官方网站下载Kibana 7.9.3的Linux版本,文件名为"kibana-7.9.3-linux-x86_64.tar.gz"。下载后,使用以下命令进行解压: ```bash tar -...

    运维管理系统需求说明书范文整理.pdf

    在Linux系统中,大页内存可以减少内存寻址的开销,从而提高应用程序性能。 10. 虚拟化与容器技术 出现的“ovsroot”可能指的是Open vSwitch,这是在Linux上运行的一个开源虚拟交换机。它用于虚拟化环境中进行网络...

    tomcat内存溢出问题.doc

    在Tomcat中,我们可以通过修改`bin/catalina.sh`(对于Unix/Linux系统)或`bin/catalina.bat`(对于Windows系统)脚本来设置JVM的内存分配。我们需要增加以下两个参数: 1. `-XX:MaxPermSize=256m`:设置最大 Perm...

    JVM参数调优、垃圾回收算法及原理体系.docx

    1. 选择64位操作系统,尽管64位JDK在Linux上运行可能稍慢,但它能支持更大的内存,从而提供更高的吞吐量。 2. 设置XMX和XMS相同,以及MaxPermSize和MinPermSize相同,避免堆大小动态调整带来的压力。 3. 在调试...

    LINUX6.1 64bit Tomcat6.0安装手ce

    Linux 6.1 64位系统上的Tomcat 6.0安装手册旨在提供详细的步骤,帮助用户在基于Linux的环境中成功安装和配置Apache Tomcat服务器。Tomcat是一款开源的Java Servlet容器,常用于部署Java Web应用程序。以下是安装过程...

    Linux最后一版免费32位Oracle JDK_8u191

    而64位JDK则没有这个限制,可以充分利用更多的内存资源,更适合大型和资源密集型的应用。然而,随着硬件的发展,32位系统逐渐减少,64位系统成为主流,但某些特定场景下,如老设备或嵌入式系统,仍然需要32位JDK的...

    linux-jdk1.8-32

    2. **安装与配置**:在Linux系统中,用户需要将解压后的JDK文件夹移动到一个系统可访问的位置,如/usr/lib/jvm,并设置JAVA_HOME环境变量指向该目录,以便系统能够找到JDK。 3. **使用命令**:通过命令行工具,如`...

Global site tag (gtag.js) - Google Analytics