jvm内存模型
1 .程序计数器:每个线程都有独立的程序计数器,每个线程之间的计数器互不影响,因此该区域是线程的私有区域。 此内存区域是Java虚拟机规范中唯一没有指定内存溢出(OOM )的区域。
2 .虚拟机堆栈:与程序计数器一样,虚拟机堆栈也是专用于线程的。 他的生命周期与线程相同,是在jvm运行时创建的。 方法在运行时创建一个包含局部变量表、操作堆栈、方法出口等信息的堆栈框架.是方法调用含义不断的堆栈、弹性堆栈。
3 .本地方法堆栈:使线程专用,并对线程调用本地方法(jni方法,由c/c创建) ) ) ) ) ) ) )。
4 .堆内存:线程共享是jvm中最大的内存空间,java运行时创建的大多数对象都存储在堆内存中。 该区域是垃圾收集器的重点观察对象,也称为gc堆。
5 .方法空间:线程共享,也称为永久层代,主要用于存储加载到虚拟机中的类信息、常量、静态变量等.
关于虚拟机堆栈和线程,让我们来看看虚拟机堆栈大小和线程数之间的关系。
从jvm内存结构来看,可以理解为jvm内存大小=堆内存大小虚拟机堆栈内存大小*线程数。
从数学的角度来看:
jvm的内存大小不变。
堆内存大小一定时:
虚拟机内存越大,线程数就越少。
堆栈内存越小,线程数越多。
如果虚拟机堆栈的内存大小恒定:
堆内存越大,线程数就越少
堆内存越小,线程数就越多。