java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁。 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器。(针对java方法,即栈) 虚拟机栈:为了虚拟机执行java方法,线程创建时就会创建一个栈帧,存储局部变量表、操作数 ...
分类:
编程语言 时间:
2018-07-01 18:20:40
阅读次数:
190
1.Java运行时数据区 2.程序计数器(PC计数器) 占用较小的一块内存空间,当执行Java方法时记录正在执行的虚拟机字节码指令地址,如果执行Native方法则计时器值为空。 3.Java虚拟机栈 java方法执行时的内存模型 查看Java虚拟机栈详细 3.1 栈帧 每个方法都会在虚拟机栈中创建一 ...
分类:
编程语言 时间:
2018-06-29 20:39:05
阅读次数:
238
递归函数 定义:即在函数定义中自己调用自己 递归就是在过程或函数中自我调用 递归必须有递归出口,即递归结束条件 举个栗子—阶乘: 函数执行过程: 注意: 使用递归函数需要防止栈溢出。 函数调用是通过 栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会增加一层栈帧,每当函数返回,就会减一 ...
分类:
编程语言 时间:
2018-06-27 18:06:17
阅读次数:
197
1. 解释什么是栈溢出,在什么情况下可能出现。 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。在Python中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返 ...
分类:
编程语言 时间:
2018-06-26 01:00:44
阅读次数:
192
Java虚拟机 虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 运行时栈帧结构 用于支持虚拟机 进行方法调用和方法执行 的数据结构,是虚拟机栈的栈元素。 每一个方法从调用开始到执行完成的过程,都对应一个栈帧在虚拟 ...
分类:
编程语言 时间:
2018-06-20 16:41:43
阅读次数:
177
这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助。废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之 ...
分类:
其他好文 时间:
2018-06-13 15:20:45
阅读次数:
147
1.java内存模型图解 Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区。这些区域有各自的用途,以及创建和销毁的 时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁,我们可以将这些区域统称为Java运 行时数据区域 如下图是 ...
分类:
其他好文 时间:
2018-06-11 15:49:10
阅读次数:
169
Java虚拟机运行时会把内存划分为如下数据区域: 1.程序计数器:可以看作是当前程序执行字节码的行号指示器,任何时候,一个处理器只会执行一条线程命令,所以每个线程都有一个独立的程序计数器。 2.虚拟机栈:也是线程私有的,生命周期与线程相同。每个方法运行时都会创建一个栈帧用于存储局部变量表、操作数栈、 ...
分类:
其他好文 时间:
2018-06-10 15:16:15
阅读次数:
164
一、Java 虚拟机内存原型 寄存器:我们在程序中无法控制。 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。 堆:存放用 new 产生的数据。 静态域:存放在对象中用 static 定义的静态成员。 常量池:存放常量。 非 RAM 存储:硬盘等永久存储空间。 二、常量池 ...
分类:
编程语言 时间:
2018-06-07 21:52:54
阅读次数:
171
GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。 jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了 ...
分类:
编程语言 时间:
2018-06-07 13:59:55
阅读次数:
175