本文摘自《深入理解计算机系统》 并发编程章节。
对于多线程编程最棘手的部分为共享变量的并发访问,那么就需要了解在编程中那些为共享变量。这就涉及到线程存储模型。
每个线程都有它自己的线程上下文.线程上下文包括:
线程ID,栈,栈指针,程序计数器,条件码和通用寄存器的值。
多个线程在进程中共享如下部分:
虚拟地址空间,只读代码块,读、写数据,堆,打开的文件集合。
寄...
分类:
编程语言 时间:
2015-07-12 19:00:24
阅读次数:
208
背景内存是现代计算机运行的中心。内存有很大一组字或字节组成,每个字或字节都有它们自己的地址。CPU根据程序计数器(PC)的值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入。一个典型指令执行周期,首先从内存中读取指令。接着该指令被解码,且可能需要从内存中读取操作数。在指令对操作数执行后,其结果可能被存回到内存。内存单元只看到地址流,而并不直...
分类:
其他好文 时间:
2015-07-11 12:16:27
阅读次数:
187
缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。
当进程执行过程中发生缺页中断时,需要进行页面换入,步骤如下:
首先硬件会陷入内核,在堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在CPU中特殊的寄存器中。
启动一个汇编代码例程保存通用寄存器及其它易失性信息,以免被操作系统破坏。这个例程将操作系统作为一个函数来调用。
(在页面换入换...
分类:
其他好文 时间:
2015-07-09 21:33:19
阅读次数:
574
Java内存区域 了解Java GC机制,必须先清楚在JVM中内存区域的划分。在Java运行时的数据区里,由JVM管理的内存区域分为下图几个模块: 其中: 1,程序计数器(Program Counter Register):程序计数器是一个比...
分类:
编程语言 时间:
2015-07-09 18:12:36
阅读次数:
242
java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 ...
分类:
编程语言 时间:
2015-07-09 06:12:43
阅读次数:
123
在java内存运行时区域的各个部分中:程序计数器,虚拟机栈,本地方法栈随线程生和灭,对于java中的堆和方法区,、只能在程序运行期间才知道会创建哪些对象,这部分内存的分配和回收是动态的,垃圾收集器所关注的主要是这部分内存。哪些内存需要回收?什么时候回收?如何回收?垃圾收集器对堆进行回收前需先确定哪些...
分类:
其他好文 时间:
2015-07-09 00:43:23
阅读次数:
102
java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 ...
分类:
编程语言 时间:
2015-07-09 00:32:43
阅读次数:
144
1:上图为java虚拟机运行时数据区程序计数器:是一块较小的内存,可以看作是当前线程所执行的字节码的行号指示器。字节码的解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支循环跳转异常处理线程回复等都要依赖于这个计数器完成。java虚拟机多线程通过线程轮流切换分配处理器时间片实...
分类:
编程语言 时间:
2015-07-09 00:27:05
阅读次数:
171
方法区永久代,共享。类信息,常量,static变量,JIT编译后的代码。运行时常量池:字面量,符号引用。堆所有对象(新生代,老年代)虚拟机栈线程私有。表示方法执行的内存模型。【局部变量表】本地方法栈程序计数器字节码行号。线程私有。【Objectobj=newObject();】——Objectobj...
分类:
其他好文 时间:
2015-07-08 22:13:07
阅读次数:
138
类执行机制JVM基于栈体系结构来执行class字节码,线程被创建后,产生程序计数器(PC)和栈(Stack)PC存放下一条执行的指令在方法内的偏移量,Stack存放一个栈帧,每个栈帧对应每个方法的每次调用,栈帧中存放局部变量和操作数栈 栈的结构如下图: JVM内存结构Java虚拟机规范规定的ja.....
分类:
其他好文 时间:
2015-06-23 21:32:09
阅读次数:
240