这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件。 上图显示的组件分两个章节解释。第一章讨论针对每个线程创建的组件,第二章节讨论了线程无关组件。 线程 JVM 系统线程 每个线程相关的 程序计数器 栈 本地栈 栈限制 栈帧 局
分类:
编程语言 时间:
2016-02-26 16:54:07
阅读次数:
291
JAVA内存区域和内存溢出异常 1、JAVA运行时数据区如下图 程序计数器:当前线程正在执行的代码的行号指示器。是线程私有的。它是JAVA虚拟机唯一没有指定OutOfMerroryError异常的区域。 虚拟机栈:是线程私有的。描述的是Java方法执行时的内存模型。每个方法被创建时,会创建一个栈帧,
分类:
其他好文 时间:
2016-02-22 13:45:01
阅读次数:
203
递归&算法基础一、递归递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈...
分类:
编程语言 时间:
2016-02-02 21:38:22
阅读次数:
449
依赖用户线程的启动和结束而建立和销毁(线程私有): --程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。 --虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Sta...
分类:
编程语言 时间:
2016-01-23 21:30:02
阅读次数:
188
C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。首先,栈是从高地址向低地址延伸的。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。先来看一个代码#include<stdio.h>
voidfun()
{
inttmp=1..
分类:
其他好文 时间:
2016-01-17 16:21:24
阅读次数:
800
【摘自Linux/Unix系统编程手册】函数的调用和返回使栈的增长和收缩呈线性。X86-32体系架构上的Linux(和大多数其它Linux和Unix的实现),栈驻留在内存的高端并向下增长(朝堆的方向)。专用寄存器--栈指针(stack pointer),用于跟踪当前栈顶。每次调用函数时,会在站上新分...
分类:
其他好文 时间:
2015-12-28 14:17:25
阅读次数:
153
最近在研究栈帧的结构,但总是有点乱,所以写了一个小程序来看看esp和ebp在栈帧中的作用。这个程序如下:这个程序很简单,就是求两个数的值,然后输出即可。所以首先把它用gcc编译链接成a.out,进入gdb进行调试。首先在main和add两处设置断点。运行到第一个断点,查看main的汇编代码:我们主要...
分类:
其他好文 时间:
2015-12-27 13:24:02
阅读次数:
247
4.其它命令(help): 1.命令 解释 2.break NUM 在指定的行上设置断点。 3.bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 4.clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。 5.continue ...
分类:
其他好文 时间:
2015-12-26 14:55:03
阅读次数:
138
Q8.1在图8-3程序中,如果用exit调用代替_exit调用,那么可能使标准输出关闭,是printff返回-1.修改该程序验证在你所使用的系统上是否会产生此种结果。如果并非如此,你怎么处理才能得到类似的结果呢?Q8.2回忆图7-6中典型的存储空间布局,由于对应于每个函数调用的栈帧通常存储..
分类:
其他好文 时间:
2015-12-03 15:51:46
阅读次数:
467
关于传值和传引用看了不少帖子,谬误很多,甚至一些人都没测试过就直接猜结果写成博文,误人子弟,真是让人气愤! 之所以很多人在这个问题上出错,实际上是对形式参数的不理解造成的。 一个方法的形式参数,仅仅是在本方法内有效的,随着本方法在方法栈帧中被pop,所有的形式参数都要等着被垃圾回收了。例如我们这样....
分类:
编程语言 时间:
2015-11-09 12:47:40
阅读次数:
259