周志朋老师写的“深入理解Java虚拟机”中的第二章,是很重要的一章,个人认为,作为一个java程序员一定要将Java最经典最有价值的“Java虚拟机”搞懂,就算是搞不全懂,也要能说出个中原理,这才不愧为一名java程序员。
很多人说Java开始落后了,Java不行了,转行吧,但无论怎样,我还是觉得这十几年的巅峰宝座不是空谈而来的,他曾经带给人们的价值远远大于如今的过错,即使是和没落的贵族相处几年,收获也会颇为丰盛。所以不要一窝蜂的去追主流语言,搞会当下的一样,还愁搞不定其他语言吗?他们都属于同一个科种的。。。
表达了一下想法,就及时stop,还是回过头来学习Java虚拟机。
反复读了2.2.2java虚拟机栈,大概明白其中含义。总结为以下几点:
1、Java虚拟机栈和程序计数器一样,是每个线程对应一个,也就是说,如果启动了n个线程,那么就有n个程序计数器及n个java虚拟机栈,栈的生命周期与线程是相同的。
2、每个方法执行时都会创建自己对应的一个栈帧,虚拟机就会把这个栈帧压入到这个方法对应的线程的Java虚拟机栈中。但方法执行完成时再将该栈帧弹出对应的java虚拟机栈中。
3、任何线程都不能访问另一个线程的程序计数器(PC寄存器)和java虚拟机栈
4、栈帧中存储着:局部变量表(包括:基本数据类型、对象引用、returnAddreess类型)、操作数栈、动态链接、方法出口等。
Java虚拟机栈与线程是一对一的关系,方法与栈帧是一对一的关系,线程与方法是一对多的关系,所以线程与栈帧是一对多的关系,所以java虚拟机与栈帧是一对多的关系。oh,我懂。
局部变量表的内存空间在编译期间就是可知的,方法运行期间是不可被改变的。
很多人说Java开始落后了,Java不行了,转行吧,但无论怎样,我还是觉得这十几年的巅峰宝座不是空谈而来的,他曾经带给人们的价值远远大于如今的过错,即使是和没落的贵族相处几年,收获也会颇为丰盛。所以不要一窝蜂的去追主流语言,搞会当下的一样,还愁搞不定其他语言吗?他们都属于同一个科种的。。。
表达了一下想法,就及时stop,还是回过头来学习Java虚拟机。
反复读了2.2.2java虚拟机栈,大概明白其中含义。总结为以下几点:
1、Java虚拟机栈和程序计数器一样,是每个线程对应一个,也就是说,如果启动了n个线程,那么就有n个程序计数器及n个java虚拟机栈,栈的生命周期与线程是相同的。
2、每个方法执行时都会创建自己对应的一个栈帧,虚拟机就会把这个栈帧压入到这个方法对应的线程的Java虚拟机栈中。但方法执行完成时再将该栈帧弹出对应的java虚拟机栈中。
3、任何线程都不能访问另一个线程的程序计数器(PC寄存器)和java虚拟机栈
4、栈帧中存储着:局部变量表(包括:基本数据类型、对象引用、returnAddreess类型)、操作数栈、动态链接、方法出口等。
Java虚拟机栈与线程是一对一的关系,方法与栈帧是一对一的关系,线程与方法是一对多的关系,所以线程与栈帧是一对多的关系,所以java虚拟机与栈帧是一对多的关系。oh,我懂。
局部变量表的内存空间在编译期间就是可知的,方法运行期间是不可被改变的。