(转载请注明出处:Java,JavaFX,Solaris技术交流 http://developers.sun.com.cn/blog/henry/)
有些用户反映在Linux系统中运行的Java应用,内存只能使用到2GB,在Java虚拟机中如果把-Xmx参数设置到2GB左右(约1.5-1.8GB),java进程就根本启动不了。我们通常使用的JVM都是32位的(64位的JVM会损失10-20%的性能,通常不建议使用),而32位程序的寻址空间应该是4GB才对,为什么Linux上的JVM只能使用2GB的内存呢?
经过和JDK研发组的人员沟通,终于弄清楚了一些相关的原因。这个问题存在于早期的一些Linux版本中,特别是内核2.5以前的版本,2.6以后的版本就基本上没有这个问题了。原来这些Linux版本对进程有个对内存2GB的限制,是一个地址连续的内存块大小的上限,而JVM的堆空间(heap size)需要连续的地址空间,因此,2GB就是java进程的理论使用的内存上限。
(转载请注明出处:Java,JavaFX,Solaris技术交流 http://developers.sun.com.cn/blog/henry/)
如果java应用需要使用较大的内存,建议使用较新版本的linux,或者修改Linux的应用/内核内存比配置为3GB:1GB。还有就是选择如Solaris等的UNIX操作系统。象Solaris这样的操作系统,在内存管理上没有2GB的限制,因此可以把heap size设置到3.5-3.6GB左右。
分享到:
相关推荐
总结来说,Linux系统中JVM内存2GB的上限主要是由于32位系统的地址空间限制和早期内核版本的限制。随着技术的发展,这个问题在现代的64位Linux和某些UNIX系统中得到了缓解。通过系统配置、使用64位JVM或者选择支持更...
该文档描述了开发测试环境中Docker及JVM内存限制部署方案
在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候将抛出内存溢出异常信息。Heap Size 最大不要超过可用物理内存的 80%,一般的要将 Xmx 和 Xms 设置相同避免每次 GC 后都要调整虚拟机堆的...
2. **虚拟内存**:Linux通过虚拟地址空间为每个进程提供了独立的4GB(32位系统)或128GB(64位系统)内存空间。这包括了堆、栈、代码、数据和共享库等区域。 - **堆**:动态分配内存的地方,由`malloc`和`calloc`等...
### JVM内存空间分配详解 #### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分...
例如,设置`-Xms2048m -Xmx2048m`可以将堆内存的最小和最大值都设置为2GB。 - **JVM默认堆内存配置**:JVM默认情况下,最小堆内存为物理内存的1/64,最大堆内存为物理内存的1/4。对于8GB物理内存的机器,这意味着...
在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...
在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、垃圾回收、堆和非堆内存、内存分配和限制等方面。 JVM 结构 JVM 的结构主要由六个部分组成:JVM API、JVM 内部组件、平台...
jps 工具类似于 Unix/Linux 系统中的 ps 命令,用于列出本地或远程主机上正在运行的所有 Java 进程的 ID 和主类名或 JAR 文件名。这对于识别正在运行的 Java 应用程序非常有用,尤其是当系统中有多个 Java 进程时,...
《深入理解IDEA插件JProfiler11:高效优化JVM内存》 在Java开发领域,高效运行和优化JVM内存是至关重要的。IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能...
这部分在JVM规范中被称为“非堆”(Non-Heap),在Java 8及以后版本,这部分被合并到堆内存中,称为元空间(Metaspace)。 - **本地方法栈(Native Method Stack)**:与JVM栈类似,但服务于本地方法(如C++方法)...
- **堆**:所有对象实例以及数组都在这里分配内存,是JVM中最大的一块内存区域,支持垃圾回收。 - **栈**:每个线程都有一个独立的栈,用于存储方法调用的帧,包含局部变量表、操作数栈、动态链接和方法返回地址。...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...
在Java编程语言中,了解和控制JVM(Java虚拟机)的内存管理是至关重要的,尤其是在性能调优、资源管理和避免内存泄漏等方面。本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并...
- **堆大小**:`-Xmx`和`-Xms`分别设置JVM的最大堆大小和最小堆大小,如`-Xmx2g`表示最大堆为2GB。 - **年轻代大小**:`-Xmn`设置年轻代的大小,例如`-Xmn256m`。 - **PermGen/元空间大小**:在Java 8之前,`...
JVM内存模型深度剖析与优化 JVM内存模型是Java虚拟机的核心组件之一,它直接影响着Java应用程序的性能和可靠性。本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一...
MAT(Memory Analyzer Tool)是IBM开发的一款强大的Java内存分析工具,专用于诊断和解决Java应用程序中的内存泄漏问题。MAT JVM内存分析工具可以帮助开发者深入理解Java虚拟机(JVM)的内存管理机制,通过分析堆内存...
JVM内存模型是Java虚拟机(JVM)中的一种内存管理机制,它将内存区分为永久区内存(Permanent space)和堆内存(heap space)两大块。永久区内存用于存放加载的Class类级对象,如class本身、method、field等等,而堆...
jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。