程序计数器+栈
程序计数器
拿到一个二进制字节码,先将他交给解释器进行解释,然后交给机器码,最后交给CPU进行处理;
程序计数器的作用:记住下一条jvm指令的执行地址;
程序计数器的特点:是线程私有的;不会存在内存溢出;
栈
一个栈是由多个栈帧组成的,栈的特点是先进后出;
定义:Java Virtual Machine Stacks(Java虚拟机栈)
- 每个线程运行时所需要的内存,称为虚拟机栈
- 每个 栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
- 每个线程只能有一个活动栈桢(栈的顶部的那个栈帧),对应着当前正在执行的那个方法
问题辨析:
垃圾回收是否涉及栈内存?
答:不涉及,垃圾回收只是回收不再使用的堆内存,不会回收栈内存
栈内存分配越大越好么?
答:不是,栈内存越大,划分的大了,通常只是可以进行多次的递归方法调用,但是不会增强运行的效率,反而会影响到线程数目的变少;
方法内的局部变量是否线程安全?
答:如果是共享的需要考虑线程安全,如果是私有的则不用考虑线程安全;如果方法内局部变量没有逃离方法的作用范围,它是线程安全的;如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全问题;
栈内存溢出:
产生原因:1. 栈帧过多导致栈内存溢出 2. 栈帧过大导致栈内存溢出