`
frenchmay
  • 浏览: 228874 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入java虚拟机第5章, 栈

阅读更多

java栈

每当启动一个新线程的时候,java虚拟机都会为它分配一个java栈。java以栈帧为单位保存线程的运行状态。虚拟机只会对java栈执行两种操作:以栈帧为单位的压栈或者出栈。

 

java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止 。虚拟机都会将当前栈弹出java栈然后释放掉,这样上一个方法的栈帧就是当前栈帧了。

 

java栈上是此对应的java线程所私有的。因此不存在多线程情况下栈数据访问同步的问题。

 

栈帧

栈帧由三部分组成:局部变量区,操作数栈和帧数据区。 局部变量区和操作数栈要视对应的方法而定,它们是按照字长计算的。

 

局部变量区: java栈帧的局部变量区被组织为一个以字长为单位,从0开始计数的数组。字节码指令通过从0开始的索引来使用其中的数据。类型为int,float,reference和returnaddress的值在数组中只占一项,而类型为byte,short和char的值在存入数组前都将被转换为int。但是long和double类型在数组中却占据连续的两项。

 

操作数栈和局部变量区一样。也被组织成一个以字长为单位的数组。但是不是通过索引来访问,而是通过标准栈操作--压栈和出栈来访问。

 

不同于程序计数器,java虚拟机没有寄存器,程序计数器也无法被程序指令直接访问。java虚拟机是由操作数栈而不是从寄存器中取得操作数的,因此它的运行方式是基于栈的而不是基于寄存器的。

 

虚拟机把操作数栈作为它的工作区--大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。

 

分享到:
评论
6 楼 laiseeme 2009-05-14  
今天发现单位有这本书  翻了翻
5 楼 frenchmay 2009-05-13  
<div class="quote_title">http_url 写道</div>
<div class="quote_div">
<div class="quote_title">frenchmay 写道</div>
<div class="quote_div"><strong>java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止,</strong></div>
<p>如果方法没有return 也没有异常,那方法改如何终止呢?</p>
<p>例如下面的这个方法:</p>
<pre name="code" class="java">public void method(){
    System.out.println("方法执行完毕。");
}</pre>
<p> </p>
</div>
<p>void类型也是一种数据类型,也可以返回,如果程序正常终结</p>
<p>遵循<strong>第一种通过return返回,成为正常返回</strong></p>
4 楼 http_url 2009-05-13  
<div class="quote_title">frenchmay 写道</div>
<div class="quote_div"><strong>java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止,</strong></div>
<p>如果方法没有return 也没有异常,那方法改如何终止呢?</p>
<p>例如下面的这个方法:</p>
<pre name="code" class="java">public void method(){
    System.out.println("方法执行完毕。");
}</pre>
<p> </p>
3 楼 xuyao 2009-01-05  
lz不知道跟哪翻译的,读起来很不通顺啊
2 楼 jiyanliang 2009-01-03  
引用

每当启动一个新线程的时候,java虚拟机都会为它分配一个java栈
java栈上的所有线程都是此线程私有的

说的感觉挺别扭的啊。。
1 楼 taupo 2009-01-02  
楼主写的很好,看了一点,现在没有时间看,以后看,留个爪

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    深入JAVA虚拟机第二版.pdf 目录

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    深入Java虚拟机(原书第2版)及书中源代码

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    深入java虚拟机第二版

    深入java虚拟机第二版 不是很清晰 但还能看 第1-4章介绍了java虚拟机的体系结构,包栈、堆,方法区、执行引擎等; 第5-20章深入介绍了java的内部细节,垃圾回收、java安全模型、java的连接模型和动态扩张机制,...

    《深入Java虚拟机第二版》 高清完整PDF版

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    深入Java虚拟机(原书第二版清晰版)

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...

    深入Java虚拟机(中文版第二版高清版)-带书签

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...

    深入java虚拟机中文第2版

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。 前言 第1章 ...

    Java虚拟机规范.Java SE 8版

    《Java核心技术系列:Java虚拟机规范(Java SE 8版)...第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。

    深入Java虚拟机第二版

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...

    Java虚拟机规范.Java SE 8版.zip

    第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版...

    Java虚拟机规范(Java SE 7)中文版

    《Java虚拟机规范(Java SE 7版)》是Java领域最...第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。

    深入java虚拟机

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    【带书签】Java虚拟机规范(Java SE 7).pdf

    《Java虚拟机规范(Java SE 7版)》是Java领域最...第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。

    java虚拟机规范 jdk8.

    第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。  《Java核心技术系列:Java虚拟机规范(Java SE 8...

    【BD高清版】深入Java虚拟机.7z

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...

Global site tag (gtag.js) - Google Analytics