程序计数器+栈

程序计数器

拿到一个二进制字节码,先将他交给解释器进行解释,然后交给机器码,最后交给CPU进行处理;

程序计数器的作用记住下一条jvm指令的执行地址;

程序计数器+栈

程序计数器的特点是线程私有的;不会存在内存溢出;

一个栈是由多个栈帧组成的,栈的特点是先进后出;

        程序计数器+栈

定义:Java Virtual Machine Stacks(Java虚拟机栈)

  • 每个线程运行时所需要的内存,称为虚拟机栈
  • 每个 栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈桢(栈的顶部的那个栈帧),对应着当前正在执行的那个方法

问题辨析:

垃圾回收是否涉及栈内存?

答:不涉及,垃圾回收只是回收不再使用的堆内存,不会回收栈内存

栈内存分配越大越好么?

答:不是,栈内存越大,划分的大了,通常只是可以进行多次的递归方法调用,但是不会增强运行的效率,反而会影响到线程数目的变少;

方法内的局部变量是否线程安全?

答:如果是共享的需要考虑线程安全,如果是私有的则不用考虑线程安全;如果方法内局部变量没有逃离方法的作用范围,它是线程安全的;如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全问题;

栈内存溢出:

产生原因:1. 栈帧过多导致栈内存溢出     2. 栈帧过大导致栈内存溢出