如何获知自己电脑JVM的最大可用内存?
在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。
实际发现版本上有细微差别的JDK最大容许内存值都不尽相同,因此在实际的应用中还是要自己试验一下看到底内存能达到什么样的值。
通过这个表想说明的是,如果你的机器的内存太多的话,只能通过多运行几个实例来提供机器的利用率了,例如跑Tomcat,你可以多装几个Tomcat并做集群,依此类推。
堆(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,因为有一部分被硬件占用了。
分享到:
相关推荐
JVM内存设置方法 JVM(Java Virtual Machine)是 Java 程序的运行环境,为了提高 Java 程序的性能,需要合理地设置 JVM 的内存分配。下面将详细介绍 JVM 内存设置的方法。 一、 JVM 内存设置参数 JVM 内存设置...
其中,-Xmx3550m 设置 JVM 最大可用内存为 3550M,-Xms3550m 设置 JVM 初始内存为 3550m,-Xmn2g 设置年轻代大小为 2G,-Xss128k 设置每个线程的堆栈大小为 128k。 垃圾收集器的选择和配置也是 jdk 内存设置的重要...
1. **内存配置**:JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。通过-Xms和-Xmx设置初始和最大堆内存,-XX:NewRatio调整...
- **最大内存 (Max Memory)**:JVM 将从操作系统分配的最大内存量。这个值是可以通过 `-Xmx` 参数进行配置的。 图形化内存条分为两部分: - **深灰色部分**:表示已用内存占最大内存的比例。 - **浅灰色部分**:...
- **jconsole**和**jvisualvm**:Java自带的性能监视工具,提供详细的JVM内存和线程信息。 通过理解这些概念和准则,并熟练运用AIX的监控工具,开发者可以有效地在AIX环境中优化Java应用程序的性能,确保系统稳定...
合理的JVM调优不仅可以提升程序的运行效率,还能优化用户体验。本文将详细介绍几种常用的垃圾收集(GC)策略及其配置方法,并深入探讨如何针对不同的应用场景选择合适的策略。 #### 常见的GC策略 在Java虚拟机中,...
gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了...
- **主题**:JVM内存管理及故障排查 - **目标受众**:Java开发者与系统管理员 - **讨论重点**: - Java内存布局的理解 - 内存溢出错误的原因与解决方法 - 垃圾收集基础知识 - Java性能调优选项 - 问答环节 ###...
Java JVM(Java虚拟机)是Java程序运行...以上只是JVM面试中的一些基础知识点,实际面试可能涉及更多细节,如内存分配策略、垃圾收集算法、性能调优等。理解JVM的工作原理对于解决性能问题和优化Java应用程序至关重要。
本文将详细探讨JVM的垃圾回收机制及其调优方法,深入分析Java内存分配原理,并讨论Java中的内存管理与内存泄露问题。 #### 二、JVM的垃圾回收机制概述 垃圾回收(Garbage Collection, GC)是JVM用于自动回收不再使用...
* 堆是 JVM 的最大的一块内存空间,用于存储对象实例和数组。 * 方法区是用于存储类的元数据的,包括类的字段、方法、常量池等信息。 * 运行时常量池是方法区的一部分,用于存储类的常量池。 * 本地方法栈是用于存储...
以下是一些常见的JVM面试题,涵盖了基础概念、内存管理、垃圾收集、类加载机制等多个方面,帮助你深入理解JVM的工作原理。 1. **JVM的结构是什么?** JVM由类装载器、运行时数据区、执行引擎、本地方法接口和本地...
G1收集器是一款全功能垃圾回收器,它将整个堆内存划分为多个大小相等的独立区域(Region),并根据需要将某些Region用作新生代Eden、Survivor或老年代空间。G1收集器支持面向局部回收的设计思路,能够根据停顿时间...
8. **性能优化**: 会话过多会占用大量内存,因此需要合理配置会话的最大数量、超时时间,以及考虑使用会话缓存和会话复制策略来提高系统性能。 9. **会话监听器**: Java Servlet API允许注册监听器,当会话创建、...
2. 运行时数据区:包括堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。其中,堆是所有线程共享的内存区域,主要存储对象实例;...
Java虚拟机(JVM)内存管理与垃圾回收是Java编程中的关键概念,它涉及到程序运行时数据区的划分、内存分配策略以及...根据应用的需求和资源情况,合理设置JVM内存参数和选择合适的垃圾收集器是提升Java应用性能的关键。