调用堆栈是指向程序计数器当前位置的函数调用链。调用堆栈的顶部函数是当前函数,下一个函数是调用当前函数的函数,依此类推。显示的调用堆栈基于当前程序计数器,除非更改寄存器上下文。 在 WinDbg 中,可以通过输入命令或通过使用Call Stack窗口中查看调用堆栈。 Call Stack窗口的打开方式 ...
分类:
数据库 时间:
2019-12-20 16:45:05
阅读次数:
135
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2019-12-17 22:08:49
阅读次数:
85
线程与进程的区别 1. 进程是资源分配的最小单元,线程是CPU调度的最小单元。所有与进程相关的资源,均被记录再PCB中。 2. 线程隶属于某一个进程,共享所有进程的资源。线程只由堆栈寄存器、程序计数器和TCB构成。 3. 进程可以看作独立的应用,线程不能看作独立的应用。 4. 进程有独立的地址空间, ...
分类:
编程语言 时间:
2019-12-16 22:38:43
阅读次数:
110
自动内存管理机制 第二章、Java内存区域与内存溢出异常 【虚拟机中内存如何划分,以及哪部分区域、什么样代码和操作会导致内存溢出、各区域内存溢出的原因】 一、运行时数据区域 Java虚拟机所管理的内存包括以下几个运行时数据区域【虚拟机内存模型】: 1.程序计数器: 可以看作是当前线程所执行的字节码的 ...
分类:
编程语言 时间:
2019-12-14 22:40:57
阅读次数:
90
那些内存需要回收 内存回收是对运行时内存区域的内存回收,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区 ...
分类:
其他好文 时间:
2019-12-10 16:47:34
阅读次数:
93
Java由于虚拟机自动内存管理机制的存在,不需为每一个对象进行delete/free方法,不易出现内存泄漏和内存溢出。但如果全权由Java虚拟机控制,出现内存泄漏的问题时,如果不了解虚拟机如何使用内存,会难以排查错误。 1.运行时数据区域 程序计数器、Java虚拟机栈、本地方法栈、堆、方法区、运行时 ...
分类:
编程语言 时间:
2019-12-06 23:20:38
阅读次数:
138
对于一个运行中的Java程序而言,其中的每一个线程都有它自己的PC (程序计数器)寄存 器,它是在该线程启动时创建的。PC寄存器的大小是一个字长,因此它既能够持有一个本地指 针,也能够持有一个returnAddress。当线程执行某个Java方法时,PC寄存器的内容总是下一条 将被执行指令的“地址“ ...
分类:
其他好文 时间:
2019-12-03 21:25:41
阅读次数:
64
最近想整理一下GC相关的知识和经验,在整理之前下决心先整理一下jvm的内存结构,后续会持续更新。 jvm内存结构重要由两部分组成:线程共享区域与线程私有区域,如下图所示: 其中方法区和堆为线程共享区域,栈与程序计数器为线程私有区域。与操作系统定义的堆栈类似,栈用来存储方法调用时产生的临时变量以及寄存 ...
分类:
其他好文 时间:
2019-12-03 19:57:09
阅读次数:
75
多线程 并发与并行、进程,线程调度自行百度 线程(thread):是一个进程中的其中一条执行路径,CPU调度的最基本调度的单位。同一个进程中线程可以共享一些内存(堆、方法区),每一个线程又有自己的独立空间(栈、程序计数器)。因为线程之间有共享的内存,在实现数据共享方面,比较方便,但是又因为共享数据的 ...
分类:
编程语言 时间:
2019-12-02 18:55:53
阅读次数:
69
一.程序计数器(寄存器):PCR 作用:记住下一条JVM指令的执行地址。 特点:①线程私有的 ②不会存在内存溢出 二.虚拟机栈 1.定义 虚拟机栈:线程运行所需要的内存空间。 栈帧:一个栈帧对应一个方法的调用。 每个线程只能有一个活动栈帧,对应着当前正在执行的哪个方法。 思考: 一、垃圾回收是否会涉 ...
分类:
编程语言 时间:
2019-11-28 23:21:56
阅读次数:
191