`
cvics_ailk
  • 浏览: 10124 次
社区版块
存档分类
最新评论

JVM内存限制和调整

    博客分类:
  • Java
阅读更多

堆(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以上的处理器就不会有限制了。

  通常,我们为了避免内存溢出等问题,需要设置环境变量
  JAVA_OPTS -Xms256M -Xmx512M 等,【对于服务器,一般都设置成一样的】
  但是有的时候可能这样的设置还会不行(比如,当Server应用程序加载较多类时,即jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置,
  如: java -Xms512m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m
  其中,使用 -XX:MaxPerSize标志来增加永久域的大小,-XX:PerSize标志设置初始值

分享到:
评论

相关推荐

    tomcat部署与内存调优

    TOMCAT应用服务器部署与内存调优 1、描述Tomcat应用服务器安装部署。 2、关于TOMCAT内存溢出及适当调整JVM内存大小。

    JAVA 堆栈内存分析

    应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个 值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成, 经验值在3000~5000 左右。 -Xmn2g :设置堆内存年轻代...

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

    最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。 第一种:是堆溢出。 在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。 没有内存泄露的情况下,调整-Xms...

    数据库大量数据导出Excel

    其次,在实验过程中,大数据量的导出很容易引发内存溢出,调整JVM的内存大小治标不治本。很多人建议保存为.CSV格式的文件。不过,.CSV方式导出也存在问题:首先,如果用excel来打开csv,超过65536行的数据都会看不见...

    Eclipse 启动运行速度调优

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

    java面试常见基础(深层次,高级研发)

    1. Jvm内存空间结构是什么样的? 1 程序计数器 1 Java栈 1 本地方法栈 2 堆 2 方法区 3 2. Jvm堆内存的划分结构和优化 3 2.1. 原理 6 2.1.1. 年轻代 6 2.1.2. 年老代 6 2.1.3. 持久代 7 2.2. 参数说明 8 2.3. 疑问...

    sizeofag:确定Java对象的大小

    这对于开发考虑内存限制的Java框架非常有用。 该项目基于。 sizeofag例如在使用, 是一种用于数据流的机器学习框架。 执照 sizeofag在下发布。 玛文 在pom.xml包括以下依赖项: < groupId>...

    Loadrunner报错日志

    1、首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement ...

    java面试题

    63.3. Sun HotSpot 1.4.1 JVM堆大小的调整 44 63.4. BEA JRockit JVM的使用 45 63.4.1. Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:...

    callgrind-to-plantuml-sequence-diagram:根据Callgrind文件生成PlantUML序列图

    渲染大图将需要大量RAM,并且可能需要调整JVM的内存设置。运行命令php application.php generate < callgrind>汇出格式在运行时,用户可以在以下导出格式之间进行选择: 屏幕文件图像1.屏幕使用此选项时,PlantUML...

    oracle 11g安装配置

    创建本地目录(如 /opt/mydbbackup),并调整属性 在SQL>环境中指定备份位置,并授权备份用户 [root@dbserver ~]# mkdir /opt/mydbbackup [root@dbserver ~]# chown oracle:oinstall /opt/mydbbackup/ [root@db...

    超级有影响力霸气的Java面试题大全文档

     ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...

    java 面试题 总结

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    易语言程序免安装版下载

    全面取消静态编译中的人为功能限制(此前有最多5个支持库同时参与静态链接等功能限制) 6. 公开易语言静态编译技术文档(参见sdk\static_docs),便于第三方支持库作者针对静态编译进行支持库改造 7. 修改以下多...

    二十三种设计模式【PDF版】

    很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Interpreter(解释器) 主要用来对语言的分析,应用机会不多. 设计模式之 Visitor(访问者) 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. ...

Global site tag (gtag.js) - Google Analytics