测试方法:在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
所以说设置VM参数导致程序无法启动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
分享到:
相关推荐
这样就可以设置它运行时最大内存为 256m。 第三种方法:通过 eclipse.ini 文件设置 Java 虚拟机内存大小 可以通过编辑 eclipse.ini 文件来设置 Java 虚拟机内存大小。eclipse.ini 文件通常位于 Eclipse 安装目录下...
### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...
在 Windows Server 2003 系统上,使用 JDK5.0,最大可设置为 1478m。 在设置堆大小时,需要考虑多方面的因素,例如操作系统、物理内存、虚拟内存等。典型的堆大小设置为:-Xmx3550m -Xms3550m -Xmn2g -Xss128k。...
解决内存溢出问题通常需要调整JVM的内存参数,如`-Xms`和`-Xmx`用于设置堆的初始大小和最大大小,以及`-XX:MaxPermSize`(对于较旧的JVM版本)或`-XX:MaxMetaspaceSize`(对于Java 8及以上版本)来控制方法区的大小...
堆内存的大小可以通过JVM启动参数进行调整,例如-Xms和-Xmx用于设置堆的初始和最大大小。 虚拟机栈则为每个线程单独创建,用于存储局部变量、方法调用的参数以及方法返回值。每当执行一个方法时,都会在虚拟机栈上...
可以通过增加`-Xmx`参数来设置最大堆内存大小。 #### 四、内存泄漏识别与定位 1. **工具选择**:可以使用如VisualVM、JProfiler等工具来监控和诊断内存泄漏问题。 2. **分析策略**:观察内存使用情况,查找不再...
JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决...
在启动Java应用程序时,可以通过命令行参数来设置JVM的初始堆内存和最大堆内存。常用的参数有: - `-Xms<size>`:设置初始堆内存大小。例如,`-Xms256M`表示初始堆内存为256MB。 - `-Xmx<size>`:设置最大堆内存...
3. 应用程序配置的JVM内存设置过小,限制了Java虚拟机可使用的最大内存。 解决方法: 1. 调整JVM参数:可以通过设置JVM启动参数来改变Java虚拟机的内存大小。例如,`-Xms`参数用于设置初始堆大小,`-Xmx`参数用于...
### Java常用内存配置知识 #### 一、Java内存计算...综上所述,通过对Java内存配置的理解和合理设置,可以有效提升Java应用的性能和稳定性。在实际开发中,应根据应用的特点和需求灵活调整这些参数,以达到最佳效果。
3. **堆内存**:堆是Java程序中最大的一块内存,用于存储所有实例对象和数组。堆内存是线程共享的,因此所有的对象都在这里分配内存。垃圾收集器(Garbage Collector)主要负责堆内存的管理,通过标记-清除、复制、...
- `-Xms` 和 `-Xmx` 参数分别用来设置堆内存的初始大小和最大大小。 - `-XX:NewRatio` 参数可以控制新生代和老年代的比例,影响垃圾回收的效率。 - `-XX:+UseConcMarkSweepGC` 参数可以启用并发标记清除的垃圾回收器...
例如,`-Xms`和`-Xmx`分别设置堆内存的初始大小和最大大小;`-XX:NewRatio`控制新生代和老年代的比例;`-XX:+UseConcMarkSweepGC`启用CMS收集器。`jstat`和`jmap`是两款强大的JVM监控工具,前者用于实时监控JVM的...
- `-Xmx512m`:设置最大堆内存大小为512MB。 - `-XX:MaxPermSize=256m`:设置永久代的最大大小为256MB。 - `-XX:ReservedCodeCacheSize=64m`:设置代码缓存的大小为64MB。 3. 如果通过MyEclipse运行项目,则可以...
例如,在Tomcat6.0中,在catalina.sh或catalina.bat文件中增加一行:JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"如果是Windows服务器还可以在系统环境变量中设置。 2. 清理应用程序中WEB-INF/lib下的jar,...
### Tomcat 6.0 修改启动内存设置及 Java JVM 参数配置详解 #### 一、背景与目的 在部署和运行 Java Web 应用时,合理地配置应用服务器(如 Apache Tomcat)的内存是非常重要的。这不仅可以提升应用程序的性能,还...
- **含义**: 设置JVM的最大堆内存大小。 - **重要性**: 当应用程序使用的内存接近-Xmx指定的值时,JVM会尝试执行垃圾回收。如果仍然无法释放足够的内存空间,则会抛出`OutOfMemoryError`异常。 3. **其他相关...
- **调优策略**:为了提高程序的性能和响应速度,开发人员可以通过调整JVM参数来优化Java堆内存的大小,如`-Xmx`(最大堆内存大小)和`-Xms`(初始堆内存大小)等。 #### 三、本机内存及其作用 除了Java堆内存之外...
内存溢出是指应用系统中存在无法回收的内存或使用的内存超过了JVM能提供的最大内存限制。这会导致程序运行异常,严重时可能导致整个应用程序崩溃。 ### Java的内存管理机制 Java的内存管理主要涉及对象的分配与...
这个知识点对于开发高效缓存系统尤其重要,因为缓存需要精确管理内存来最大化存储效率和访问速度。 首先,我们需要理解Java虚拟机(JVM)是如何分配内存的。Java对象主要存储在堆内存中,堆是由JVM管理的动态内存...