基于java jvm内存区域的介绍

  jvm虚拟机在运行时需要用到的内存区域。广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个      基于java jvm内存区域的介绍”>
  <p> <强>总的就是</强> </p>
  <p> </p>
  <p>内存模型又分堆内存(堆)和方法区(有时也称)为非堆和栈</p>
  <p>堆又分新生代(年轻)和老年代(老/终身)</p>
  <p>新生代又分默认比例为8:1:1的伊甸园空间,从幸存者空间,为幸存者空间</p>
  <p>当进行垃圾回收时,伊甸园,幸存者从存活得对象会复制到servivor到空间</p>
  从与<p>接着空间互换。(当从区的对象足够老时,即标记的次数达到老年级别,便到老年代去)<br/>
  </p>
  <p> </p>
  <p> <img src=

  

xms:堆的最小空间

  

- xmx:堆的最大空间

  

-PermSize:方法区的最小空间

  

-MaxPermSize:方法区的最大空间

  

xss:每个线程的堆栈空间

  

-newSize:新生代最小空间

  

-maxNewSize:新生代最大空间
  

  

老年代内存可以通过设置堆的大写和新生代的大小来控制

  

老年代内存=堆内存——新生代内存

  

基于java jvm内存区域的介绍

  

<强>栈

  

  

线程私有,控制着字节码所执行的行数。调用本地方法(本地)时为空

  

当前线程所执行的字节码的行号指示器,字节码解释器就是在工作时通过改变计数器的行号来获获取要执行的字节码指令。调用本地方法(本地)时计数器为空

  

  

线程私有,java执行方法的内存模型

  

每个方法执行的时候都会创建一个栈帧,用于存放局部变量,操作数栈,动态链接,方法出口等信息

  

局部变量表:基本数据类型,对象引用,长和两类型占两个局部变量空间

  

每调用一个方法,都会对参数进行压栈
  

  

  

线程私有。调用本机方法时
  

  

<强>堆:

  

  

线程共享,对象的实例以及数组都存储在这里

  

堆又分新生代,老年代

  

在分代收集算法中,新生代又分伊甸园空间,从survitor空间和对survitor空间)。它们之间内存比例为8:1:1

  

  

线程共享

  

存放类的信息,常量、静态变量,即时编译后的代码

  

方法区下又有运行时常量池:存放编译期生成的字面量和符号引用

  

以上这篇基于java jvm内存区域的介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

基于java jvm内存区域的介绍