jvm(三)内存区域控制参数及对应溢出异常_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > jvm(三)内存区域控制参数及对应溢出异常

jvm(三)内存区域控制参数及对应溢出异常

 2017/6/12 5:31:54  chou_qi  程序员俱乐部  我要评论(0)
  • 摘要:开发过程中,或程序运行过程中每次遇到OutOfMemory异常或GC异常或StackOverflowError异常我们都是一堆参数乱配,都把值调大,只是大体知道是跟jvm内存分配有关,具体应该怎么调,对应的异常应该调整那些参数,或者换句话说,jvm内存分配区域中都分别对应那些参数大多数情况下都是不知道的,只是把相关的参数跳上去,预期结果都是应该起作用,到底能不能起作用,自己心里也没底。下面就来说一下jvm堆、栈、方法区等内存区域对应的参数,及每个区域可能抛出的异常类型,发生异常的场景分析。一
  • 标签:JVM 异常 内存

开发过程中,或程序运行过程中每次遇到OutOfMemory异常或GC异常或StackOverflowError异常

我们都是一堆参数乱配,都把值调大,只是大体知道是跟jvm内存分配有关,具体应该怎么

调,对应的异常应该调整那些参数,或者换句话说,jvm内存分配区域中都分别对应那些参数

大多数情况下都是不知道的,只是把相关的参数跳上去,预期结果都是应该起作用,到底能不能

起作用,自己心里也没底。

?

下面就来说一下jvm堆、栈、方法区等内存区域对应的参数,及每个区域可能抛出的异常类型,

发生异常的场景分析。

?

一、参数类型

?

1.堆空间参数

2.栈空间参数

3.方法区空间参数

4.本机直接内存参数

?

二、异常类型

?

1.OutOfMemory异常

2.StackOverflowError异常

?

三、辅助参数说明

?

1.-XX:+HeapDumpOnOutOfMemoryError 打印堆内存异常时打印出快照信息

2.-XX:+HeapDumpPath 快照输出路径

3.-Xmn指定eden区的大小 -XX:SurvirorRation来调整幸存区的大小

4.-XX:PretenureSizeThreshold设置进入老年代的阀值

?

四、参数说明、对应场景的异常

?

1.堆内存参数

-Xms:堆最小值(新生代和老年代之和)

-Xmx:堆最大值(新生代和老年代之和)

当最小值=最大值时,这时堆内存是不可扩展的。

例:-Xms80M -Xmx80M?

通常将-Xmx和-Xms设置为一样的大小来减少gc的次数

?

堆内存不足时抛出OutOfMemoryError异常。

?

2.栈内存参数

-Xss

例:-Xss128k

?

线程下无论栈帧太大还是栈容量太小,及引用深度超过

虚拟机允许深度都会抛出StackOverflowError

每个方法压入栈的帧大小是不一致的。

?

多线程下当每个线程分配栈帧太大内存不能够扩展时抛出

OutOfMemoryError异常

?

线程栈帧越大,可创建的线程越少。

?

3.方法区参数

-XX:PermSize方法区内存最小值

-XX:MaxPermSize 方法区内存最大值

?

各个线程共享的内存区域,主要用来存储类的元数据、

常量、静态变量、即时编译器编译后的代码等数据

例:-XX:PermSize=20M -XX:MaxPermSize=20M

?

异常类型 OutOfMemoryError :

原因:常量过多,或代理反射等使用频繁

?

4.本机直接内存参数

-XX:MaxDirectMemorySize

例:-XX:MaxDirectMemorySize=10M

?

不足时抛出OutOfMemory异常

?

发表评论
用户名: 匿名