JVM学习笔记一(线程私有的内存区域)

Jvm运行时,内存区域可以划分为两大部分

1.线程私有(程序计数器,虚拟机栈,本地方法栈)

2.线程共享(堆与方法区)

程序计数器:因为cpu会划分为时间片给多个线程执行,所以需要程序计数器记录下指令执行到具体的位置,当下次线程切换时,从记录的位置继续执行,同时它也是唯一不会发生OOM错误的。

本地方法栈与虚拟机栈在某些jvm虚拟机中合并成一个栈,有些是分开成两个。

虚拟机栈在线程运行时,每执行一个方法,都会对应生成一个栈帧,放入栈中。每个时刻正在运行的方法是虚拟机栈顶部的栈帧,方法的执行就是一个出栈与入栈的操作。虚拟机栈的大小默认为1M,可以使用参数-Xss来进行调整它的大小,比如:-Xss256K。JVM使用栈数据结构的原因是为了满足 A方法调用B方法,B方法调用C方法这种情况设计的。

JVM学习笔记一(线程私有的内存区域)_第1张图片

栈帧中的局部变量表,主要存储的是八大java基本类型与对象的引用。

public class StackTest{

 public void sumTest(int sum1){

    sum1=sum1-100;

  }

}

上面这段代码执行时,会先局部变量表里押入一个入参sum1,然后往操作数栈放入sum1的值,再往操作数栈放入100这个值,然后从操作数栈中取出sum1与100两个数,计算完成后,改写局部变量表中sum1的值。

 

你可能感兴趣的:(java)