JVM调优-java虚拟机内存模型及参数设置
2017-09-27 23:33
357 查看
这篇全是干货,利于记忆。
原文:http://www.cnblogs.com/csuwater/p/5428404.html
java虚拟机内存模型主要包括:程序计数器、虚拟机栈、本地方法栈、java堆、方法区。
程序计数器是一块很小的内存,每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。各个线程的计数器之间不相互影响,独立工作,是一个线程的私有的内存模型。
java虚拟机栈也是线程私有的内存空间,它和java程序在同一时间创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
java虚拟机的允许java栈的大小是动态的或者固定的。java虚拟机抛出两个异常:StackOverflowError和OutOfMemoryError。
参数配置:
-Xss 设置栈的大小,栈的大小直接决定函数调用的可达深度。
设置不同的-Xss大小,运行出的深度是不一样的。
虚拟机栈运行时使用一种叫做栈帧的数据结构保存上下文数据。栈帧存放了方法的局部变量表、操作数栈、动态链接方法和返回地址信息,这就说明方法中参数不同使用的栈空间是不同的。
本地方法栈和java栈相似,但它是管理本地方法的调用,本地方法是C实现的。但在sun的hot spot虚拟机中,不区分本地方法和虚拟机栈。同时也抛出两个异常:StackOverflowError和OutOfMemoryError。
java堆是java运行时内存最重要的部分,几乎所有的对象和数组都是在堆内存中分配空间。java堆分为新生代和老年代。新生代主要存储刚刚产生的对象,如果对象的生命足够长,就把老年对象移入老年代。
新生大分为三级:eden(刚出生)、survivor space0(幸存者0)、survivor space1(幸存者1)。
方法区也是jvm内存区中非常重要的一块内存区域,它是被jvm所有线程所共享的,方法区主要保存的信息是类的元数据。
在Hot Spot 虚拟机中,方法区称为永久区。
堆分配参数总结:
-Xms:设置java应用程序启动时的初始堆大小
-Xmx:设置java应用程序能获得的最大堆大小
-Xss:设置线程栈的大小
-XX:MinHeapFreeRatio:设置堆空间的最小空间比例。当堆空间的空闲内存小于这个数值时,jvm便会扩展堆空间。
-XX:MaxHeapFreeRatio:设置堆空间的最大空间比例。当堆空间的空闲内存大于这个数值时,jvm便会缩小堆空间。
XX:NewSize : 设置新生代的大小
XX:NewRatio:设置老年代与新生代的比例,即老年代除以新生代大小
XX:SurviorRatio:新生代中eden区与survivior 区的比例
-XX:PermSize:设置永久区的大小
-XX:TargetSurvivorRatio:设置survivior 的使用率。当达到这个空间使用率时,会将对象送入老年代。
天道酬勤,厚德载物!
原文:http://www.cnblogs.com/csuwater/p/5428404.html
java虚拟机内存模型主要包括:程序计数器、虚拟机栈、本地方法栈、java堆、方法区。
1:程序计数器(每个线程独有)
程序计数器是一块很小的内存,每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。各个线程的计数器之间不相互影响,独立工作,是一个线程的私有的内存模型。
2:java虚拟机栈
java虚拟机栈也是线程私有的内存空间,它和java程序在同一时间创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。java虚拟机的允许java栈的大小是动态的或者固定的。java虚拟机抛出两个异常:StackOverflowError和OutOfMemoryError。
参数配置:
-Xss 设置栈的大小,栈的大小直接决定函数调用的可达深度。
public class testStack { static int count=0; public static void main(String[] args) { // TODO Auto-generated method stub try { recursion(); } catch (Throwable e) { // TODO: handle exception System.out.println("栈的深度是:"+count); e.printStackTrace(); } } public static void recursion() { count++; recursion(); } }
设置不同的-Xss大小,运行出的深度是不一样的。
虚拟机栈运行时使用一种叫做栈帧的数据结构保存上下文数据。栈帧存放了方法的局部变量表、操作数栈、动态链接方法和返回地址信息,这就说明方法中参数不同使用的栈空间是不同的。
3:本地方法栈
本地方法栈和java栈相似,但它是管理本地方法的调用,本地方法是C实现的。但在sun的hot spot虚拟机中,不区分本地方法和虚拟机栈。同时也抛出两个异常:StackOverflowError和OutOfMemoryError。
4:java堆
java堆是java运行时内存最重要的部分,几乎所有的对象和数组都是在堆内存中分配空间。java堆分为新生代和老年代。新生代主要存储刚刚产生的对象,如果对象的生命足够长,就把老年对象移入老年代。新生大分为三级:eden(刚出生)、survivor space0(幸存者0)、survivor space1(幸存者1)。
5:方法区
方法区也是jvm内存区中非常重要的一块内存区域,它是被jvm所有线程所共享的,方法区主要保存的信息是类的元数据。在Hot Spot 虚拟机中,方法区称为永久区。
堆分配参数总结:
-Xms:设置java应用程序启动时的初始堆大小
-Xmx:设置java应用程序能获得的最大堆大小
-Xss:设置线程栈的大小
-XX:MinHeapFreeRatio:设置堆空间的最小空间比例。当堆空间的空闲内存小于这个数值时,jvm便会扩展堆空间。
-XX:MaxHeapFreeRatio:设置堆空间的最大空间比例。当堆空间的空闲内存大于这个数值时,jvm便会缩小堆空间。
XX:NewSize : 设置新生代的大小
XX:NewRatio:设置老年代与新生代的比例,即老年代除以新生代大小
XX:SurviorRatio:新生代中eden区与survivior 区的比例
-XX:PermSize:设置永久区的大小
-XX:TargetSurvivorRatio:设置survivior 的使用率。当达到这个空间使用率时,会将对象送入老年代。
天道酬勤,厚德载物!
相关文章推荐
- JVM调优-java虚拟机内存模型及参数设置
- java虚拟机jvm关于内存的设置与调优
- tomcat内存设置及jvm参数调优
- [转]java虚拟机jvm关于内存的设置与调优
- Java虚拟机jvm关于内存的设置与调优
- java虚拟机jvm关于内存的设置与调优
- java虚拟机jvm关于内存的设置与调优
- [转]java虚拟机jvm关于内存的设置与调优
- tomcat内存设置及jvm参数调优
- java虚拟机jvm关于内存的设置与调优
- Java基础学习总结(96)——Java虚拟机JVM及Tomcat中的JVM有关内存的设置与调优
- java虚拟机jvm关于内存的设置与调优
- JVM内存模型和关键参数设置
- java虚拟机jvm关于内存的设置与调优
- java虚拟机jvm关于内存的设置与调优
- Java虚拟机JVM启动内存参数设置
- Java虚拟机(JVM)中的内存设置详解
- Tomcat JVM内存参数设置
- Tomcat 内存_JVM参数设置解决溢出
- JVM内存调优设置原理