/** * javap命令可以对class反汇编得到其字节码文件(此命令并不是jdk8开始的,只不过jdk8中对工具进行加强,增加了一些参数,可通过 javap -help了解) * * 注意: * 字节码文件在虚拟机中是通过栈帧来保存指令的,也称为操作栈,是一个后入先出的栈。并不是针对寄存器的.....
分类:
其他好文 时间:
2015-06-01 18:48:22
阅读次数:
130
JVM管理的内存
程序计数器(PC):每条线程都有独立的PC
JVM栈(Java栈):描述的是Java方法执行的内存模型,每个方法被执行的时候会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,也是线程私有的。
本地方法栈:与Native方法相关
Java堆:线程共享的内存地址空间,用于存放对象实例,也是GC管理的主要区域。
直接内存:与Native堆相关
方法区:存储已被JVM加载...
分类:
编程语言 时间:
2015-06-01 14:49:10
阅读次数:
212
程序计数器、JVM栈、本地方法栈这三个内存区域和线程是一一对应的,并且每一个线程的这三个区域相互独立互不干扰。他们都随着线程的产生而产生,线程的灭亡而灭亡。JVM栈和本地方法栈中的栈帧都随着方法的加载而入栈,随着方法的结束而出栈。栈帧的大小是在程序员写类的时候就确定下来的。因此这三种区域的内存大小都具备确定性,当方法结束或线程结束后,这些内存空间就会自动被回收掉,所以JVM无需考虑这些区域的内存回收...
分类:
其他好文 时间:
2015-05-29 10:11:00
阅读次数:
116
java堆用于存放对象示例,与数据相关,java栈主要与线程的函数调用相关
函数调用一次出入java栈一次,调用的时候入栈,调用结束(return或者throw)出栈,函数参数和函数局部 变量保存在栈帧中,所以函数调用结束之后栈帧被弹出,相应的局部变量也就失效了。
函数参数和局部变量越多,需要栈帧中保存的局部变量表就越大,函数调用的层次就会越少。
局部变量是垃圾回收的很重要的根节点,任何被局部变量...
分类:
编程语言 时间:
2015-05-27 14:05:49
阅读次数:
184
递归就是函数间接的调用自己, 它的实现基于函数参数传递的栈机制, 每次递归递归调用都会多一个栈帧——和简单的函数调用并没有什么不同 (都是使用了调用栈)。调用自己和调用其它函数并没有本质的区别, 都是建立新栈帧, 传递参数并修改当前代码行。在函数体执行完毕后删除栈帧, 处理返回值并修改当前代码行。....
分类:
其他好文 时间:
2015-05-17 21:39:51
阅读次数:
132
Java的函数调用栈就是Java虚拟机栈,它是线程私有的,与线程一同被创建,用于存储栈帧。
栈帧随着方法的调用而创建,随着方法的结束而销毁。可以说栈帧是方法的抽象。
于是,可以通过打印出Java虚拟机栈中的栈帧信息来了解函数调用过程。用于实现这个过程的Java代码如下:
package methodcall;
public class Methods {
public void meth...
分类:
编程语言 时间:
2015-05-17 12:22:19
阅读次数:
488
JVM对象访问解析
对象访问过程的内存情况
public void function(){
Object obj = new Object();
}function方法被执行的时候,JVM在JVM栈中为function创建一个栈帧,用于存放function在运行过程中的一些信息。
Object obj被执行时,JVM在function方法对应的栈帧中的本地变量表中创建Object类型的引用...
分类:
其他好文 时间:
2015-05-15 09:09:43
阅读次数:
177
这是我阅读JVM说明书的笔记,我画了下图来增进我的理解。
1.每个独立线程的数据区(非共享)
每个线程的的独立数据区域包括程序计数器(Program Counter Register),JVM栈(JVM Stack)和本地方法区(Native Method Stack)
a.程序计数器:用来控制每个线程的每一次执行
b.JVM栈:包括下图列出的栈帧
c.本地方法区:用来支持本地方法,比...
分类:
其他好文 时间:
2015-05-05 14:24:25
阅读次数:
113
INCLUDE Irvine32.incmyProc PROTO, x:DWORD, y:DWORD.data.codemain proc mov eax,0EAEAEAEAh mov ebx,0EBEBEBEBh INVOKE myProc, 1111h, 2222h ex...
分类:
其他好文 时间:
2015-05-04 17:29:57
阅读次数:
119
每个伟大的开发者应该知道如何使用调试器。Xcode 具有优良的调试器包装 LLDB 的 UI (或者,如果你生活在过去,GDB)、 给所有标准的技巧,如断点、 步进和缩小及围绕你的代码,您可以访问和堆栈帧详细信息。...
分类:
其他好文 时间:
2015-04-29 17:08:15
阅读次数:
234