1.必须有一个明确的结束条件。 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高,递归层次过多时会导致栈溢出 (在计算机中,函数调用是通过栈stack这种数据结构实现的,每当进入一个函数调用, 栈就会加一层栈帧,每当函数返回,站就会减一层栈帧,由于栈的大小不是无限的,所 ...
分类:
编程语言 时间:
2018-03-06 12:54:27
阅读次数:
462
(一)包含了哪几个部分? ①栈内存:每个线程私有。java方法执行的内存模型。java栈中存放的是一个个栈帧,每一个帧对应一个被调用的方法。栈帧包裹局部变量表、操作数栈、指向运行时常量的引用、方法返回地址、附加信息。当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕 ...
分类:
其他好文 时间:
2018-03-01 23:34:26
阅读次数:
182
JVM内存管理机制和垃圾回收机制 JVM结构 图片描述: 1. java源码编译成class文件 1. class文件通过类加载器加载到内存 1. 其中方法区存放的是运行时的常量、静态变量、类信息等,被所有线程共享 1. 堆空间存放对象,被所有线程共享 1. 栈空间存放的是栈帧,包括局部变量、操作数 ...
分类:
其他好文 时间:
2018-02-24 13:03:10
阅读次数:
151
转载:细说虚拟机栈 引文 虚拟机栈是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法就会为每个方法生成一个栈帧(Stack Frame),用来存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用和完成的过程,都对应 ...
分类:
其他好文 时间:
2018-02-23 19:01:30
阅读次数:
129
一、前言 本文以一个简单的例子来描述ARM linux下的stack frame。 本文也是对tigger网友问题的回复。 二、源代码 #include <stdio.h> static int static_interface_leaf( int x, int y ) { int tmp0 = 0 ...
分类:
其他好文 时间:
2018-02-21 22:58:44
阅读次数:
264
1.运行时常量池属于线程共享区中的方法区。 2.运行时常量池用于编译期生成的各种自变量,符号引用,这部分内用将在类加载后接入方法区的运行时常量池中存放。 看如下代码所示,如图: 很明显s1 == s2为true,而s1 == s3为false。 因为基本数据类型和抽象数据类的引用是放在栈帧的局部变量 ...
分类:
编程语言 时间:
2018-02-17 00:21:09
阅读次数:
205
1 什么是函数?函数是组织好的,可重复使用的,用来实现单一或相关功能的代码块。 2 为什么要用函数?函数可以提高应用的模块性,和代码重复利用率。它包括内置函数与自定义函数3 函数的分类:内置函数与自定义函数内置函数:http://www.cnblogs.com/ldq1996/p/8447100.h ...
分类:
其他好文 时间:
2018-02-13 19:52:32
阅读次数:
171
JVM是根据运行时数据的存储结构来划分内存结构的,运行时数据包括java程序本身的数据信息和jvm运行java程序需要的额外数据信息。JVM运行时数据区:程序计数器:每条线程有一个独立的程序计数器,用于保存当前正常执行的程序的内存地址。堆动态内存分配。所有线程共享,在虚拟机启动时创建,可以处于物理上不连续的存储空间。此区域的唯一目的就是存放对象实例。方法区线程共享。当JVM使用类装载器装载某个类时
分类:
其他好文 时间:
2018-02-06 23:07:43
阅读次数:
203
Grabage Collection GC GC要完毕的三件事情: 哪些内存须要回收? 什么时候回收? 怎样回收? 内存运行时区域的各个部分中: 程序计数器、虚拟机栈、本地方法栈这3个区域随线程而生。随线程而灭。 栈中的栈帧随着方法的进入和退出而有条不紊地运行着出栈和入栈的操作。 每个栈帧中分配多少 ...
分类:
编程语言 时间:
2018-02-04 13:51:19
阅读次数:
185
程序计数器(Program Counter Register):一块较小的内存空间,可看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。Java虚拟机的多线程是 ...
分类:
编程语言 时间:
2018-02-03 21:58:25
阅读次数:
154