`

JVM最大分配内存

 
阅读更多

分析了当前比较流行的几个不同公司不同版本JVM的最大内存,得出来的结果如下:

公司 JVM版本 最大内存(兆)client 最大内存(兆)server
SUN 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902


除非特别说明,否则JVM版本都运行在Windows操作系统下

附:如何获得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,因为有一部分被硬件占用了。

  • 分享到:
    评论

    相关推荐

      JAVA 堆栈内存分析

      圾回收完成后JVM 重新分配内存。 -Xss128k :设置每个线程的栈大小。JDK5.0 以后每个线程栈大小为1M,之前每个线程栈 大小为256K。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个 值能生成更...

      resin-jvm 调优

      gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了...

      tomcat内存的分配和溢出处理方法

      如何获得JVM的最大可用内存?内存溢出的处理办法:第一种:是堆溢出。第二种:永久保存区域溢出。第三种:无法创建新的线程。

      Tomcat内存溢出的三种情况及解决办法分析

      这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。 给出一个有关能够创建线程的最大个数的估算公式: (MaxProcessMemory - JVMMemory - ...

      linux解决Tomcat内存溢出的问题

      JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。 一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError:...

      java是去蜗牛还是源码时代-JVM-:JVM-

      java是去蜗牛还是源码时代 JVM-JVM调优总结 -Xms -Xmx -Xmn -Xss(转) 田间的蜗牛chris ...为jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能够占用500M内存 -Xss 为jvm启动的每个线程分配的内

      Java新生代老年代的划分及回收算法

      Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。 此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。 Java堆是垃圾...

      weblogic内存调优

      JVM内存的调优 1. Heap设定与垃圾回收Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。JVM的Heap分配...

      Java常见面试问题整理.docx

      此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 2.方法区(元空间):方法区用于存储已被虚拟机加载的类信息、常量、静态变量,如static修饰的变量加载类的时候就被加载到方法区中。...

      WebSphere参数调优.txt

      堆设置过小,会使得对象可分配空间变小,从而会频繁的使用垃圾收集机制来释放内存空间,而每次垃圾收集,都会耗用一定的系统资源。请考虑: (1)选定应用程序服务器的 JVM 堆是否与同一机器上的其它应用程序服务器 ...

      docker-minecraft-server:Minecraft服务器的Docker映像

      MAX_MEMORY分配给JVM的最大内存。 默认为MEMORY EULA表示您接受 。 通过将此变量设置为true来接受。 变体 图像基于takenopenjdk的高山图像。 Paper : {version}-paper-{runtime} ,例如: 1.16.5-paper-ado

      Eclipse 启动运行速度调优

      运行参数如下: eclipse.exe -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M <br>-------------- <br>JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关和非标准...

      lattesHyperjaxb3:将 latte xml 转换为可通过 Hibernate 访问的关系数据库数据

      hyperjaxb 拿铁 ... VM args:Xms 指定初始内存分配池,Xmx 指定 Java 虚拟机 (JVM) 的最大内存分配池 -Xms64m -Xmx256m pids 和 MaxHeapSize jps jmap -head // Runtime.getRuntime().maxMemory();

      Road_Trip:CS51 的最终项目

      如何设置所有东西以进行公路旅行: Ubuntu 安装 Java 8,如本站点 如果 Java 安装成功,请打开终端并输入以下... Xms 指定程序的初始内存,Xmx 指定 JVM 将分配的最大值。 示例值可以是“java -jar /path/to/Road_Tr

      PicturePixels:一个Java项目,用于从图像集合中生成图像

      有时会超过JVM默认的最大允许数量。 为了克服这个问题,请使用Java参数-Xmx4g启动应用程序,例如,允许分配4GB的内存。 屏幕截图 输出示例 命令行用法 也可以在没有GUI的情况下使用此应用程序。 用法: java [-Xmx...

      http-gradle-cache-server:HTTP构建缓存服务器

      缓存中存储的缓存总条目受分配给JVM的堆的限制它能做什么: 缓存gradle构建储存在记忆体中此模式的选项: 复制到另一个节点(如果已配置) 驱逐条目以使用LRU释放内存怎么跑$ java -jar http-cache-se

      JAVA性能优化权威指南

      你需要关注各种问题,包括算法结构、内存分配模式以及磁盘和文件I/O的使用方式。性能调优最困难的是找出问题,即便是经验丰富的人也会被他们的直觉所误导。性能杀手总是隐藏在最意想不到的地方。 正如维基百科所言:...

      yubo-java-nio:java nio的学习项目

      VS 非直接缓冲区直接缓冲区1、直接缓冲区最适合I/O 2、创建成本比非直接缓冲区高 3、直接缓冲区使用的内存是通过调用原生的、操作系统特定的代码来分配的 4、内存存储区域不受限制垃圾收集,因为它们在 JVM 堆之外。...

      Tomcat监控工具Probe,支持tomcat6-7-8-9.zip

      Tomcat监控工具Probe 1.Porbe介绍 psi-probe用于对Tomcat进行监控,比tomcat的manager强大很多。 ...probe-2.3.3.zip 或者 probe.war ...3.将下载好的war包,或者zip... Quick check:快速检测tomcat的数据源、内存等

      net学习笔记及其他代码应用

      答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...

    Global site tag (gtag.js) - Google Analytics