Jvm内存分配概述与相关配置详解

Java虚拟机运行时数据区

程序计数器是一块较小的内存空间,可以看成是当前线程所执行的字节码的行数指示器。如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行一个native方法,这个计数器就为空(Undefined)。此内存区域是唯一一个Java虚拟机规范中没有规定任何OurOfMemberError的区域。

Java虚拟机栈,位虚拟机执行Java方法服务,线程私有的,生命周期与线程相同。在Java虚拟机规范中,这个区域规定了两种异常:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowError异常;如果虚拟机栈可以动态扩展,在扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

本地方法栈为虚拟机使用到的Native方法服务,与虚拟机栈一样也会抛出StackOverFlowError和OutOfMemoryError异常。

Java堆是虚拟机管理的内存中最大的一块,它唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。它不需要连续的内存可以选择固定的大小或者可扩展。它也是垃圾收集器管理的主要区域(GC堆)。通过-Xmx和-Xms可以动态扩展堆大小。堆无法再扩展时就会抛出OutOfMemoryError异常。

方法区也是哥哥线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译期编译后的代码等数据。Java虚拟机规范中描述为堆的唯一逻辑部分,对方法区的限制非常宽松。它不需要连续的内存可以选择固定的大小或者可扩展,还可以选择不实现垃圾收集。无法满足内存分配需求时抛出OutOfMemoryError异常。

堆大小设置:

JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。

常用设置:

java –Xmx1024m –Xms512m –Xmn1g -Xss128k
-Xmx3550m:设置JVM最大可用内存为1024M。
-Xms3550m:设置JVM最小内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn1g:设置新生代大小为1G。整个堆大小=新生代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大新生代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

java –Xmx2048m –Xms2048m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:设置新生代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则新生代与年老代所占比值为1:4,新生代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置新生代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个新生代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象再新生代的存活时间,增加在新生代即被回收的概论。


对象内存与垃圾收集器

对象内存与垃圾收集器

图片详情

JVM的垃圾收集器要么是串行的,要么是并行的,归纳为三大类:串行收集器、并行收集器、并发收集器。JDK1.7 Update 14之后使用了G1(Garbage-First)收集器,是当今收集器技术最前沿的成果之一,其特点为:
并行与并发:多CPU,多和环境下的硬件优势。
分代收集:分代概念保留。
空间整合:从整体上看是基于“标记-整理”算法实现,从局部上看是基于“复制”算法实现。在运行过程中不会产生内存空间碎片,收集后可提供规整的可用内存。有利于程序长时间运行,分配大对象时不会因为无法找到连续的内存空间而提前GC。
可预测的停顿:能让使用者明确指定在一个长度为N毫秒的时间段内,消耗在垃圾收集上的时间不超过N毫秒。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值