程序计数器

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:46:47
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

程序员需要了解的硬核知识之CPU

柔情痞子 提交于 2019-12-01 18:45:39
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段: 提取,解码和执行 。CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语:Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的 临时数据存储介质 CPU 的内部结构

Java内存分区

≯℡__Kan透↙ 提交于 2019-12-01 15:25:16
Java程序是交由JVM执行的,所以Java内存区域划分的时候事实上是指JVM区域划分 1、Java程序执行过程: 如图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作Runtime Data Area(运行时数据区)也就是我们常常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)。 一、运行时数据区域包括五部分 根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法区(Native Method Stack)、方法区(Method Area)、堆(Heap)。 如上图所示,JVM运行时数据区包括这五部分,在JVM规范中虽然规定了程序在执行期间运行时数据区应该包括这几部分,但是至于具体如何实现并没有做出规定,不同的虚拟机厂商可以有不同的实现方式。 二、运行时数据区的每部分到底存储了那些数据? 1、程序计数器 程序计数器(Program Counter Regist

Java 虚拟机JVM

假装没事ソ 提交于 2019-12-01 06:08:53
定义 Java Virtual Machine:Java程序的运行环境(Javae二进制字节码的运行环境),相比C++有以下好处: 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界检查 多态 学习JVM有什么用? 帮助我们理解底层实现原理,例如:foreach是如何实现的?动态代理又是如何实现的?等等 常见的JVM JVM是一套规范,可以有不同的实现(HotPot) 学习路线 类加载器:ClassLoader JVM内存结构:Method Area(方法区)、Heap(堆)、JVM Stacks(虚拟机栈)、PC Register(程序计数器)、Native Method Stacks(本地方法栈) 执行引擎:解释器(Interceptor)、JIT Compiler(即时编译器)、GC(垃圾回收器) 内存结构 1.程序计数器 定义:Program Counter Register,程序计数器(寄存器) Java源代码->二进制字节码(一堆JVM指令)->通过解释器->机器码->交给CPU执行 其实程序计数器的作用就是:记住下一条JVM指令的地址。 特点:程序计数器是线程私有的 不会存在内存溢出 来源: https://www.cnblogs.com/zxfei/p/11664107.html

java虚拟机内存区域详解

末鹿安然 提交于 2019-11-29 21:32:53
Java虚拟机在执行java程序的过程中,会将它所管理的内存区域划分为若干个不同的数据区域。主要分为以下几个区域: 方法区:和堆一样,为多个线程共享,它用于存储类信息、常量、静态常量和即时编译后的代码等数据。 虚拟机栈:用于存储局部变量、操作栈、动态链接、方法出口等信息。 本地方法栈:本地方法栈和Java虚拟机栈发挥的作用非常相似,主要区别是Java虚拟机栈执行的是Java方法服务,而本地方法栈执行Native方法服务(通常用C编写)。 堆:是被所有线程共享的最大的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 程序计数器:当前线程所执行的字节码的行号指示器,程序计数器是线程隔离的,每一个线程在工作的时候都有一个独立的计数器。程序计数器的特性 (1)程序计数器具有线程隔离性 (2)程序计数器占用的内存空间非常小,可以忽略不计 (3)程序计数器是java虚拟机规范中唯一一个没有规定任何OutofMemeryError的区域 (4)程序执行的时候,程序计数器是有值的,其记录的是程序正在执行的字节码的地址 (5)执行native本地方法时,程序计数器的值为空。原因是native方法是java通过jni调用本地C/C++库来实现,非java字节码实现,所以无法统计 来源: https://www.cnblogs.com

单片机期末复习

安稳与你 提交于 2019-11-28 23:34:57
一、硬件结构 1.1部分引脚说明 RST:复位引脚,两个机器周期的高电平后复位 ALE:锁存低八位地址 EA:高电平时,访问内部程序存储器(ROM) P0:双向IO口、分时复用-低八位地址,数据总线 P1:双向IO口 P2:双向IO口,访问外部存储器时,提供高八位地址总线 P3:双向IO口,有第二功能 1.2存储器 物理上分为:4 个空间 即片内ROM、 、 片外ROM(程序存储器) 片内RAM、 、 片外RAM(数据存储器) 逻辑上分为: : 3 个空间 , 程序内存(ROM) ( 片内 、 外 ) 统一编址 MOVC 数据存储器 ( 片内) ) MOV 数据存储器(片外) MOVX 1.2.1程序存储器(ROM 作用:存储用户程序和表格常数 特殊单元: 0000H:复位后从这里开始执行程序 中断单元: 外中断0 (INT0 ) 0003H 定时器0 (T0 ) 000BH 外中断1 (INT1 ) 0013H 定时器1 (T1 ) 001BH 串行口(UART ) 0023H 1.2.2内部数据存储器(RAM 通用工作寄存器组 00~1FH共32个,四组通用寄存器,即(四组R0~R7) 可以使用RS1(PSW.4)RS0(PSW.3)来切换寄存器区 RS1 RS0 寄存器区 内存地址 00 0区 00-07H 01 1区 08-0FH 10 2区 10-17H 11 3区 18

知识点 定时器的使用

强颜欢笑 提交于 2019-11-27 15:39:36
package demo_caculorimport ( "fmt" "sync" "time")func main() { //线程与协程 fmt.Println("程序开始") time.AfterFunc(3e9, func() { //此类似协程需要时间,必须注意主线程是否执行时间超过3秒 fmt.Println("程序执行") }) fmt.Println("程序结束") //通过阻塞主线程,配合协程 time.Sleep(4 * time.Second) //WaitGroup简介,等待组,实际上是一个计数器,只要计数器中有内容将一直阻塞 //WaitGroup存在于sync包中,WaitGroup只有三个方法 //Add(delta int)表示向内部计数器添加增量(delta),其中参数delta可以是负值 //Done()表示减少WaitGroup计数器的值,应该相当于在程序最后执行,相当于Add(-1) //Wait()表示阻塞直到WaitGroup计数器为0 var wg sync.WaitGroup wg.Add(5) for i := 0; i < 5; i++ { go func() { fmt.Println("执行") time.Sleep(time.Second) wg.Done() }() } wg.Wait()} 来源: https://www