尾递归的定义 如果一个函数的所有地柜形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归。当递归调用时整个函数中过最后执行的语句且它的返回值不属于表达式的一部分时,这个地柜调用就是尾递归。尾递归的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的 ...
分类:
其他好文 时间:
2017-12-05 11:51:47
阅读次数:
145
JVM内存划分,是人为的根据不同内存空间的存储特点以及存储的数据:(逻辑分区) 1)程序计数器:当前线程所执行的字节码的行号指示器。 2)本地方法栈:为虚拟机使用的native方法服务。 3)java虚拟机栈:描述java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表 ...
分类:
其他好文 时间:
2017-11-29 00:08:46
阅读次数:
127
http://en.citizendium.org/wiki/Stack_frame To use a stack frame, a thread keeps two pointers, often called the Stack Pointer (SP), and the Frame (FP) ...
分类:
其他好文 时间:
2017-11-23 16:32:18
阅读次数:
266
已经入行快有两年了,然而没有认真看过java虚拟机内存的介绍,下面把自己看的关于java虚拟机内存的介绍写下来,分享给大家。 java 虚拟机在运行时将内存分为几个区域,分别为程序记数区,java虚拟机栈,本地方法栈,java堆,方法区,运行常量池。此外还有一个叫做直接内存的区域,虽然不是java虚 ...
分类:
编程语言 时间:
2017-11-16 23:57:07
阅读次数:
188
转自:http://www.jianshu.com/p/7ebbe102c1ae Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域。 java虚拟机运行时数据区 一、程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器。在JVM的概念模型里,字节码解释 ...
分类:
其他好文 时间:
2017-11-13 11:21:49
阅读次数:
109
今天我们来讲讲,关于C语言里栈帧的那些事。 栈帧可以说是C语言里比较难理解的一个点里,但是,难的东西,要是搞懂了,那么拿下这门语言,也不晚了。 首先要明白,C语言中内存分配方式有三种: 1.静态存储区域分配。 地址空间概念在程序运行生命周期之间都存在,就比如一些全局变量和一些static定义的局部变 ...
分类:
其他好文 时间:
2017-11-11 11:23:28
阅读次数:
152
一、内存结构图 程序计数器 保存着当前线程执行的虚拟机字节码指令的内存地址,使得保证线程切换回来后,还能恢复到原先状态。(本地native丰富则计数器为空) 虚拟机栈(JVM栈) 每创建一个线程时就会对应创建一个Java栈,所以Java栈也是"线程私有"的内存区域,这个栈中又会对应包含多个栈帧,每调 ...
分类:
编程语言 时间:
2017-11-10 12:51:07
阅读次数:
166
java中堆和栈的区别: 我们平常说的堆和栈,其实就是Java虚拟机中的虚拟机栈和堆,为什么说是虚拟机栈,因为栈分为两个,一个是本地方法栈,另一个就是我们平常说的虚拟机栈。虚拟机栈是线程私有的,这就意味着它的生命周期和线程相同。我们在使用一个方法时,在虚拟机栈中会创建一个栈帧用于保存局部变量表、操作 ...
分类:
编程语言 时间:
2017-11-10 00:35:14
阅读次数:
140
今天我们来看一下函数的调用过程与栈帧。 我们通过一段简单的代码和图示来介绍这个过程: 将这个过程用图示表示出来: 在cpu中,两个寄存器EBP、ESP分别指向栈的底端和顶端。 当程序开始运行时,先会创建两个变量a、b, 这时在栈中就会创建两段空间,地址中分别存放a和b的值,且由于a比b先创建,所以a ...
分类:
其他好文 时间:
2017-11-05 13:17:39
阅读次数:
133
关于如何使用pprof进行profiling的问题,请参考https://studygolang.com/articles/7069,本文仅做一些补充。 1. http://xxx:6060/debug/pprof/heap?debug=1页面的解释 ...
分类:
编程语言 时间:
2017-11-03 15:24:52
阅读次数:
184