Thread与jvm虚拟机栈

 jvm内存模型

 

1.程序计数器:每条线程都有一个独立的的程序计数器,各线程间的计数器互不影响,因此该区域是线程私有的。该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM(内存溢出:OutOfMemoryError)情况的区域。

2.虚拟机栈:  与程序计数器类似,虚拟机栈也是线程私有的,他的生命周期跟线程相同,是jvm运行时创建,方法在执行的时候都会创建一个栈帧,用于存放局部变量表,操作栈,方法出口等信息...方法的调用意味的不断的压栈,弹栈。

3.本地方法栈:线程私有,给线程调用本地方法(jni方法,由c/c++编写)

4.堆内存: 线程共享,是jvm中最大的一块内存区域,java运行时几乎所有创建的对象都存放于堆内存中,该区域也是垃圾回收器的重点观察对象,也被称为gc堆。

5.方法区:线程共享,也被称为永久代,主要用于存储被虚拟机加载的类信息,常量,静态变量等...

 

说到虚拟机栈与线程,下面看一下,虚拟机栈大小与线程数量之间的关系:

 

从jvm内存结构来看,可以理解为  jvm内存大小=堆内存大小+虚拟机栈内存大小*线程数量。

  从数学的角度:

  jvm内存大小不变 ,

    当堆内存大小固定不变:

      虚拟机栈内存越大,线程数量越少;

      虚拟机栈内存越小,线程数量越多;

    当虚拟机栈内存大小固定不变:

      堆内存越大,线程数量越少;

      堆内存越小,线程数量越多;

 

posted @ 2019-02-23 17:05  追尾巴的小猪0617  阅读(589)  评论(0编辑  收藏  举报