测试方法:在命令行下用 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,因为有一部分被硬件占用了。

最新文章

  1. MYSQL数据库导入出错:#1046 - No database selected
  2. jquery的几种ajax提交方式
  3. xampp 配置虚拟主机
  4. gulp插件autoprefixer
  5. Unity3D 给模型偏移纹理
  6. js中apply方法的使用
  7. Android Studio Lint 自动检查清除冗余资源
  8. 使用JavaScript
  9. php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常
  10. SDOI2012Longge的问题
  11. 断命windows上卸载node并重装
  12. bzoj4005[JLOI2015]骗我呢
  13. Geodatabase - 删除要素
  14. Python学习笔记21:数据库操作(sqlite3)
  15. Tomcat 启动报错:javax.naming.NamingException: No naming context bound to this class loader
  16. 201521123016《Java程序设计》第14周学习总结
  17. iOS 开发 atomic 与 nonatomic 区别
  18. mysql的连接
  19. JMeter 中跨线程组 变量值传递的方法
  20. 【JS】【2】ajax传的参数为数组时,后台接收为null的处理

热门文章

  1. HTML查漏补缺 【未完】
  2. python 模块之-shelve
  3. Newtonsoft.Json 概述
  4. 【BZOJ4325】【NOIP2015】斗地主 搜索
  5. npm 淘宝源
  6. pycharm修改注释颜色
  7. 脚本监控web服务器,工作不正常发邮件提醒
  8. HNOI2019总结
  9. redis主从复制和sentinel配置高可用
  10. 自学zabbix集锦