java虚拟机在运行Java程序的时候会将其内存划分为好几个不同的数据区域。
1.永久代 JVM的方法区
用于存放静态类型数据,该块对垃圾回收没有什么影响。
2.新生代
所有新建的对象首先存放在新生代,目的在与尽快回收那些生命周期短的对象。
新生代主要由Eden和Survivor Space构成, 大小统过-Xmn指定, 一般将Survivor区分成S1,S2两块。Eden与Survivor Space的默认比例为8:1:1, 可以通过-XX:SurvivorRatio指定。
3.老年代
在新生代中经历了N个周期还没被回收的对象就会被复制到老年代,因此可以认为存放的都是一些生命周期较长的对象。
当对象在新生代存活次数超过上限时(可通过-XX:MaxTenuringThreshold配置, 对象存活的次数)就会被复制到老年代。相当于是Eden+某个S中存活下来的对象大于另一个S中的空间, 新生代中的对象就会被复制到老年代。
根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。在JVM运行时,可以通过配置以下参数改变整个JVM堆的配置比例。
1.JVM运行时堆的大小
-Xms堆的最小值
-Xmx堆空间的最大值
2.新生代堆空间大小调整
-XX:NewSize新生代的最小值
-XX:MaxNewSize新生代的最大值
-XX:NewRatio设置新生代与老年代在堆空间的大小
-XX:SurvivorRatio新生代中Eden所占区域的大小
3.永久代大小调整
-XX:MaxPermSize
不管以什么形式来划分堆,其储存的都是对象实例,划分的目的也是为了更好的回收内存或更快的分配内存。
对大多数应用来说,堆内存应该是虚拟机管理的内存中最大的一块。java堆是可以被线程共享的区域,几乎所有的对象都在堆上进行内存空间的分配.
1.永久代 JVM的方法区
用于存放静态类型数据,该块对垃圾回收没有什么影响。
2.新生代
所有新建的对象首先存放在新生代,目的在与尽快回收那些生命周期短的对象。
新生代主要由Eden和Survivor Space构成, 大小统过-Xmn指定, 一般将Survivor区分成S1,S2两块。Eden与Survivor Space的默认比例为8:1:1, 可以通过-XX:SurvivorRatio指定。
3.老年代
在新生代中经历了N个周期还没被回收的对象就会被复制到老年代,因此可以认为存放的都是一些生命周期较长的对象。
当对象在新生代存活次数超过上限时(可通过-XX:MaxTenuringThreshold配置, 对象存活的次数)就会被复制到老年代。相当于是Eden+某个S中存活下来的对象大于另一个S中的空间, 新生代中的对象就会被复制到老年代。
根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。在JVM运行时,可以通过配置以下参数改变整个JVM堆的配置比例。
1.JVM运行时堆的大小
-Xms堆的最小值
-Xmx堆空间的最大值
2.新生代堆空间大小调整
-XX:NewSize新生代的最小值
-XX:MaxNewSize新生代的最大值
-XX:NewRatio设置新生代与老年代在堆空间的大小
-XX:SurvivorRatio新生代中Eden所占区域的大小
3.永久代大小调整
-XX:MaxPermSize
不管以什么形式来划分堆,其储存的都是对象实例,划分的目的也是为了更好的回收内存或更快的分配内存。