虚拟机内存结构

1.内存结构图

虚拟机内存结构_第1张图片

2.堆内存

-Xms128m    //初始值   等效于  -XX:InitialHeapSize=128m	
-Xmx512m  //最大值  等效于   -XX:MaxHeapSize=512m	
–XX:NewRatio =3    //新域与旧域比例为1:3

1)年轻代

-Xmn100m   //设置年轻代	
-XX:NewSize=50   //设置新域初始值	
-XX:MaxNewsize=100   //设置新域最大值。	
注:Xmn 与  NewSize 都是设置新生代的内存大小。经过测试,写在最后的一个参数起作用。

2)老年代

3)存活区

-XX:SurvivorRatio=n     //年轻代中Eden区与两个Survivor区的比值。

3.虚拟机栈内存

-Xss2m  设置线程栈的大小

4.本地方法栈内存

5.方法区内存

-XX:PermSize=32m  初始值	
-XX:MaxPermSize=64m  最大值

6.codeCache简介

Java代码在执行时一旦被编译器编译为机器码,下一次执行的时候就会直接执行编译后的代码,也就是说,编译后的代码被缓存了起来。缓存编译后的机器码的内存区域就是codeCache。这是一块独立于java堆之外的内存区域。

网址:https://blog.csdn.net/yandaonan/article/details/50844806

7.jdk1.8变动

  1. 废弃永久代(PermGen)改用元空间(Metaspace)

  2. 为什么废弃永久代(PermGen)

    1)移除永久代是为融合HotSpot JVM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代。

    2)由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen

  3. 元空间(Metaspace)跟永久代(PermGen)区别

    元空间是方法区的在HotSpot jvm 中的实现,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。理论上取决于32位/64位系统可虚拟的内存大小。可见也不是无限制的,需要配置参数。

你可能感兴趣的:(java技术)