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

Java执行机制

 
阅读更多

前言

       这篇里的东西,其实是我在草稿箱里找到的.因为当时写的比较粗,而且这个题目的内容没有完结..所以一直没有发布.但是后续有篇文章 

java中 obj=null对垃圾回收有用吗 

  要引用里面局部变量表的知识,所以就先把这个半吊子发布出来,后续慢慢补充.

 

类执行机制

jvm采用中间码来实现执行.其中,方法执行的指令有下面几个

(1)invokestatic 执行static方法

(2)invokevirtual 调用对象实例方法

(3)invokeinterface 调用接口方法

(4)invokespecial 调用private方法和Init方法

上面说的其实有点笼统,invokevirtual和invokespecial的知识可以看一下 Java方法分派 里面说的比较详细.

另外,jdk7以后新增了一条方法执行 invokedynamic 提供了一条对动态语言的支持.可惜在jdk7没有在java语言中支持该指令. 可以看一下 http://rednaxelafx.iteye.com/blog/477934

      sun JDK基于栈的体系来执行字节码.线程在创建后,都会产生程序计数器(PC register)和栈(Stack),其中程序计数器存放要执行的指令在方法内的偏移量,栈当中存放栈帧,每个方法每次调用都会产生栈帧.


注:该图来自 毕玄的书 <发布式Java应用基础和实践>
局部变量区用于存放方法中的局部变量和参数,操作数栈用于存放方法执行过程中的中间结果.
 可以这么理解,任何在方法体中特意定义过的局部变量,那么都会放到局部变量表(方法参数也会放这里).其他的中间结果.具体看下面的例子
public class Test
{
    public int add(int a,int b){
		int c = a + 1;
		return c * b;
	}
}
 看javap输出
首先要说明的是,按照之前的说法,方法参数会放到局部变量表中.所以局部变量表中的第一个值对应add方法的参数a,第二个值对应于参数b.

 

写道
public int add(int, int);
Code:
Stack=2, Locals=4, Args_size=3
0: iload_1 //将局部变量表中第一个值压入操作数栈(这个值对应add方法中的参数a)
1: iconst_1 //将int 类型的 1 放入操作数栈. 
2: iadd //执行add指令. 将操作数栈顶两个元素相加,然后把结果放到栈顶 (a + 1)
3: istore_3 //把栈顶元素放到局部变量表中的第三个位置.也就是c
4: iload_3 //把局部变量表第三个元素压入栈顶,也就是c
5: iload_2 //把局部变量表第二个元素压入栈顶,也就是b
6: imul //执行mul指令,将栈顶两个相乘,然后把结果放入栈顶,也就是 c * b
7: ireturn //把栈顶元素返回.
LineNumberTable:
line 8: 0
line 9: 4

}

 补充说明一下,

写道
其实局部变量表是有第零个元素的.不过一般这个元素都是指向this.如果把方法改成static,就可以看到第一个方法参数(也就是a) 就是以iload_0来压栈了.

 

栈顶缓存

   从上面的例子看到,我们计算 c * b 的时候,需要从存放c的寄存器(也就是第三个局部变量表的元素)先压入操作数栈的栈顶,然后再计算相乘操作.而栈顶缓存的效果就是,取消压栈的这次操作,直接把寄存器的数据拿来做相乘操作,然后把结果压入栈.

 

 

 

                                     -----未完待续

分享到:
评论
1 楼 sbpcx 2017-01-14  
发布式Java应用基础和实践 -> 分布式Java应用基础和实践

相关推荐

    JAVA运行机制

    ### JAVA运行机制详解 #### 一、JAVA与其它技术的关系 在深入了解JAVA运行机制之前,我们需要先明确JAVA作为一种编程语言,在整个软件开发生态系统中的位置。JAVA不仅仅是一门编程语言,它还代表了一整套的技术栈...

    Java运行机制

    通过此文章,我们可以简单的认识一下java程序的运行机制。

    java的运行机制

    综上所述,Java的运行机制涉及到编译、执行、类加载等多个层面,每个环节都对Java程序的成功运行起着至关重要的作用。深入理解这些机制有助于开发者更好地掌握Java语言的特点,提高编程效率和代码质量。

    java锁机制Synchronizedjava锁机制Synchronized

    Synchronized 代码块是 Java 中的一种同步机制,它可以指定获取某个对象的钥匙,然后在该对象上的某个代码块中执行同步操作。Synchronized 代码块可以指定用哪一把钥匙才能开这个屏风的锁,可以用本房的钥匙,也可以...

    java面试题--反射机制

    Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制提供了以下功能: 1. **获取类的信息**:可以在运行时获取类的修饰符、父类、实现接口等信息。 2. **操作...

    Java内存模型.mht,对理解java运行机制可以有更深刻的理解,可以好好看下

    Java内存模型.mht.一部很不错的书。可以好好看下,对你有很大的帮助,对理解java的运行机制有更深刻的理解!

    JAVA反射机制应用

    JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态调用对象的方法的...

    java程序的运行机制详细分析

    ### Java程序的运行机制详细分析 #### 一、Java为何具备平台独立性 Java作为一种广泛使用的编程语言,其最大的特点之一就是平台独立性。这意味着编写的Java程序可以在任何支持Java虚拟机(JVM)的操作系统上运行而...

    Java反射机制 Java反射机制

    Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并操作对象。Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用类的方法等。通过反射,程序可以动态地创建对象和调用...

    Java的安全机制研究与分析

    这种运行方式意味着Java字节码在任何平台上都需要通过Java虚拟机(JVM)进行解释和执行。JVM充当了一个中间层,对所有的操作进行调度和审核,确保程序不会直接调用本地操作系统的方法或过程,从而增强了平台无关性和...

    Java虚拟机解释执行机制研究.pdf

    Java虚拟机(JVM)是一种能够执行Java字节码的虚拟机,它提供了一个平台无关的执行环境,使得Java程序可以在各种不同的硬件和操作系统上运行。JVM解释执行机制是Java虚拟机执行字节码的一种方式,其中解释器将Java...

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: 1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间...

    学习Java基本语法的仓库 存放学习Java的md文件和Java代码.rar

    java运行机制 java核心机制 java虚拟机 jvm java virtual machine 1. jvm是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行管理数据、内存、寄存器,包含在JDK中 2. 不同平台,不同虚拟机 3. java...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

    Java虚拟机运行机制

    Java虚拟机运行机制 Java虚拟机(JVM)是一种用于计算设备的规范,可以用不同的方式(软件或硬件)加以实现。JVM包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机是一个...

    一个例子让你了解Java反射机制

    - 反射操作通常比直接的Java代码执行慢,因为它涉及了额外的运行时检查和权限验证。 - 反射也可能破坏封装性,过度使用可能导致安全问题,因此在使用时需要谨慎。 通过8个demo,你可以逐步深入理解Java反射机制,...

    Java反射机制课件ppt

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...

Global site tag (gtag.js) - Google Analytics