- 浏览: 356279 次
- 性别:
- 来自: 南京
博客专栏
-
设计模式那些事儿
浏览量:5966
文章分类
- 全部博客 (85)
- news (3)
- java面试题 (3)
- java基础 (2)
- 英语短文 (2)
- 英语演讲 (2)
- Weekly Address (5)
- 英语写作 (2)
- 转载 (1)
- 2010 FIFA World Cup (5)
- Scrum (1)
- 计算机基础 (2)
- java引用对象 (1)
- 英语阅读 (1)
- Ext (6)
- Javascript (3)
- Web编程 (4)
- 战国策 (7)
- html (1)
- java (33)
- concurrency (1)
- jvm (31)
- 方法区 (9)
- 栈 (5)
- 堆 (1)
- 程序计数器 (1)
- 本地方法栈 (1)
- class file (5)
- 常量池 (2)
- attributes (1)
- 连接模型 (1)
- applet (1)
- gc (5)
- 垃圾收集 (5)
- 方法调用 (2)
- IBM (0)
- 门户(Portal) (0)
- Solr (1)
- Lucene (1)
- 全文检索 (1)
- 设计模式 (4)
- 责任链模式 (1)
- 责任链 (1)
- COR (1)
- Pattern (1)
最新评论
-
Nabulio:
是不错的
Java的Integer与int互转 -
shihengli2010:
学习了 !Integer i = 100; Integer ...
Java的Integer与int互转 -
flex涵:
还可以,差不多就是这个意思.
Java的Integer与int互转 -
lijingshou:
相当好用。。。
输入年月日格式yyyyMMdd,判断是否是周末 -
denverj:
你好,是这本书的英文版,名字叫<Inside the J ...
JVM学习笔记-帧数据区(Frame Data)
Like the local variables, the operand stack is organized as an array of words. But unlike the local variables, which are accessed via array indices, the operand stack is accessed by pushing and popping values. If an instruction pushes a value onto the operand stack, a later instruction can pop and use that value.
和局部变量区一样,操作数栈也是被组织成一个以字长为单位的数组。但是和前者不同的是,它不是通过索引来访问,而是通过标准的栈操作—压栈和出栈—来访问的。比如,如果某个指令把一个值压入到操作数栈中,稍后另一个指令就可以弹出这个值来使用。
The virtual machine stores the same data types in the operand stack that it stores in the local variables: int, long, float, double, reference, and returnType. It converts values of type byte, short, and char to int before pushing them onto the operand stack.
虚拟机在操作数栈中存储数据的方式和在局部变量区中是一样的:如int、long、float、double、reference和returnType的存储。对于byte、short以及char类型的值在压入到操作数栈之前,也会被转换为int。
Other than the program counter, which canít be directly accessed by instructions, the Java Virtual Machine has no registers. The Java Virtual Machine is stack-based rather than register-based because its instructions take their operands from the operand stack rather than from registers. Instructions can also take operands from other places, such as immediately following the opcode (the byte representing the instruction) in the bytecode stream, or from the constant pool. The Java Virtual Machine instruction set's main focus of attention, however, is the operand stack.
不同于程序计数器,Java虚拟机没有寄存器,程序计数器也无法被程序指令直接访问。Java虚拟机的指令是从操作数栈中而不是从寄存器中取得操作数的,因此它的运行方式是基于栈的而不是基于寄存器的。虽然指令也可以从其他地方取得操作数,比如从字节码流中跟随在操作码(代表指令的字节)之后的字节中或从常量池中,但是主要还是从操作数栈中获得操作数。
The Java Virtual Machine uses the operand stack as a work space. Many instructions pop values from the operand stack, operate on them, and push the result. For example, the iadd instruction adds two integers by popping two ints off the top of the operand stack, adding them, and pushing the int result. Here is how a Java Virtual Machine would add two local variables that contain ints and store the int result in a third local variable:
虚拟机把操作数栈作为它的工作区——大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。比如,iadd指令就要从操作数栈中弹出两个整数,执行加法运算,其结果又压回到操作数栈中,看看下面的示例,它演示了虚拟机是如何把两个int类型的局部变量相加,再把结果保存到第三个局部变量的:
begin
iload_0 // push the int in local variable 0 onto the stack
iload_1 // push the int in local variable 1 onto the stack
iadd // pop two ints, add them, push result
istore_2 // pop int, store into local variable 2
end
In this sequence of bytecodes, the first two instructions, iload_0 and iload_1, push the ints stored in local variable positions zero and one onto the operand stack. The iadd instruction pops those two int values, adds them, and pushes the int result back onto the operand stack. The fourth instruction, istore_2, pops the result of the add off the top of the operand stack and stores it into local variable position two. In Figure 5-10, you can see a graphical depiction of the state of the local variables and operand stack while executing the above instructions. In this figure, unused slots of the local variables and operand stack are left blank.
在这个字节码序列里,前两个指令iload_0和iload_1将存储在局部变量中索引为0和1的整数压入操作数栈中,其后iadd指令从操作数栈中弹出那两个整数相加,再将结果压入操作数栈。第四条指令istore_2则从操作数栈中弹出结果,并把它存储到局部变量区索引为2的位置。图5-10详细表述了这个过程中局部变量和操作数栈的状态变化,图中没有使用的局部变量区和操作数栈区域以空白表示。
发表评论
-
java书籍
2011-12-15 15:31 0线程 Java Concurrency in Pra ... -
JVM学习笔记-本地方法调用(Invoking a Native Method)
2011-11-25 11:56 1200Invoking a Native Method ... -
JVM学习笔记-调用Java方法(Invoking a Java Method)
2011-11-25 11:35 1551Invoking a Java Method As m ... -
JVM学习笔记-分代收集器(Generational Collectors)
2011-11-23 14:41 1959Generational Collectors ... -
JVM学习笔记-拷贝收集器(Copying Collectors)
2011-11-22 16:34 1654Copying Collectors Copy ... -
JVM学习笔记-压缩收集器(Compacting Collectors)
2011-11-22 16:17 1378Compacting Collectors G ... -
JVM学习笔记-跟踪收集器(Tracing Collectors)
2011-11-22 16:04 1967Tracing Collectors Trac ... -
JVM学习笔记-引用计数收集器(Reference Counting Collectors)
2011-11-22 15:46 2552Reference Counting Collect ... -
applet notinited的解决方案
2011-11-13 14:45 4585最近项目当中正好使用到了applet,这个很少接触过的东东。 ... -
JVM学习笔记-动态连接和解析(Dynamic Linking and Resolution)
2011-11-08 11:09 3473When you compile a Java pro ... -
JVM学习笔记-属性格式(Attributes Types)
2011-11-07 12:15 1520Attributes The Java Vir ... -
JVM学习笔记-属性(Attributes)
2011-11-07 12:03 1556Attributes As mentioned ... -
JVM学习笔记-方法(Methods)
2011-11-07 11:25 2262Methods Each method dec ... -
JVM学习笔记-字段(Fields)
2011-11-07 11:17 1975Each field (class variable a ... -
JVM学习笔记-特殊字符串(Special Strings)
2011-11-05 14:33 1710Special Strings 特殊字符串 T ... -
JVM学习笔记-Class文件(Class File)
2011-11-05 14:39 1630What is a Java Class Fi ... -
JVM学习笔记-本地方法栈(Native Method Stacks)
2011-11-02 10:16 19263本地方法栈(Native Me ... -
JVM学习笔记-帧数据区(Frame Data)
2011-10-28 09:16 1757In addition to the local var ... -
JVM学习笔记-局部变量区(Local Variables)
2011-10-27 10:42 3093The local variables secti ... -
JVM学习笔记-栈帧(The Stack Frame)
2011-10-27 10:35 2562The stack frame has three pa ...
相关推荐
总之,rewolf-jvm-operand-stack-viewer是学习和研究JVM操作数栈的宝贵资源,通过这个工具,我们可以将抽象的字节码指令与具体的栈操作联系起来,加深对Java程序执行过程的认识,进而提高编程能力。
2. 操作数栈(Operand Stack):操作数栈用于执行算术运算和逻辑运算,它是一个后入先出(LIFO)的数据结构。每当执行一条字节码指令,操作数栈可能会进行压栈或弹栈操作。 3. 动态连接(Dynamic Linking):每个...
* 操作数栈(Operand Stack):存储方法执行过程中的操作数。 * 方法返回地址(Return Address):存储方法返回时的地址。 * 动态链接(Dynamic Link):存储方法之间的调用关系。 三、栈桢的创建 栈桢的创建是...
2. 操作数栈(Operand Stack):这是一个后进先出(LIFO)的数据结构,用于保存计算过程的中间结果。每当执行一个Java字节码指令,可能涉及向操作数栈压入数据或从栈中弹出数据。它是基于栈的执行引擎的核心组件,与...
按照JVM规范,操作指令需要的参数是从操作数栈获得的(the operand stack)。 在JVM中,操作码可以分为不同的类别,例如: * Constants:将常量池的值或者已知的值压入操作数栈。 * Loads:将局部变量值压入操作数...
- 操作数栈(Operand Stack) - 动态连接(Dynamic Linking) - 返回地址(Return Address) - 附加信息(Frame Data) 7. **JVM内存模型** - JVM内存模型规定了线程如何访问和共享数据,分为工作内存(线程...
- **Operand Stack Pointer**:操作数栈指针,用于指向操作数栈顶部。 - **Frame Pointer**:帧指针,指向当前执行方法的帧的起始位置。 - **Vars Pointer**:变量指针,指向局部变量表中下一个可用的位置。 这些...
7. **操作数栈(Operand Stack)** - 操作数栈用于暂存中间结果,支持方法内表达式的计算。它是一个后进先出的数据结构,在执行字节码指令时用于存放临时变量和操作结果。 8. **动态链接(Dynamic Linking)** - ...
- **操作数栈(Operand Stack)**:在方法执行过程中用于存放中间结果,也可用于实现数据和地址的传递。 - **动态链接(Dynamic Linking)**:用于支持方法调用过程中动态链接到具体的方法实现。 - **方法出口(Method...
2. **操作数栈顶指针(Operand Stack Pointer)**:指向操作数栈的顶部,操作数栈是一个后进先出(LIFO)的数据结构,用于存储计算过程中的数据。 3. **当前执行环境指针(Frame Pointer)**:指向当前执行的方法的...
7. 操作数栈(Operand Stack): 在每个线程的虚拟机栈中,每个方法调用对应一个栈帧,其中包含了操作数栈。执行Java字节码时,会将操作数压入栈,进行计算后再弹出结果。 8. CPU指令集与字节码执行: JVM通过...
- **操作数栈(Operand Stack)**:用于存储临时结果或操作数。 - **方法出口(Method Exit)**:用于保存返回地址和其他控制信息。 3. **方法区(Method Area)**:有时也被称作“永久代”,但自Java 8起已经被...
- **操作数栈(Operand Stack)**:主要用于保存计算过程中产生的中间结果,也用来存放操作数。 - **动态链接(Dynamic Link)**:包含一个指向运行时常量池中该栈帧所属方法的引用。 - **方法返回地址(Return ...
2. **操作数栈**(Operand Stack):也叫表达式栈,是执行计算和操作的地方。在执行Java字节码指令时,会将操作数压入操作数栈,进行运算后将结果出栈。例如,在执行`int a = 1 + 2;`时,会先将1和2分别压入操作数栈...
2. **操作数栈顶寄存器**(Operand Stack Top Register, optop):指示操作数栈顶的位置。 3. **帧指针寄存器**(Frame Pointer Register, frame):指向当前方法调用帧的起始位置。 4. **变量槽指针寄存器**...
2. **操作数栈** (Operand Stack):也称为表达式栈,用于存储计算过程中的中间结果。在执行Java字节码指令时,操作数栈会被用来进行算术运算、对象创建等操作。栈顶元素经常作为操作的对象,而运算结果会被压入栈中...
- **操作数栈(Operand Stack)**:用于执行算术运算和存储中间结果。 - **动态连接(Dynamic Linking)**:存储方法的常量池引用,用于方法调用。 - **返回地址(Return Address)**:当方法执行完毕时,返回到...
4. **操作数栈**: 执行计算和存储中间结果的地方,它是JVM的五个区域之一(其他包括本地变量表、操作数栈、常量池、方法区和堆)。 5. **索引定位**: `istore`指令需要一个索引参数,指示要存储的变量在局部变量表中...
- **操作数栈(Operand Stack)**:支持方法内的表达式计算,通过栈操作(如Push/Pop)进行数据的存取。 - **帧数据区(Frame Data)**:包括常量池解析结果、方法返回时的处理以及异常处理信息。 - **异常处理**:当...
- **操作数栈(Operand Stack)**:执行算术运算和逻辑操作,类似于一个临时的工作区,用于存储中间结果。 - **动态链接(Dynamic Linking)**:指向运行时方法的常量池引用,用于方法调用。 - **方法前行地址...