一、程序、进程、线程
任何一门编程语言都需要的知识,区分出程序、进程、线程对整个代码执行流程的理解有一定提升,面试中也经常问到
1. 程序
计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。--摘自百度百科
程序通俗来讲就是我们给计算机下发的任务,由许多计算机指令组成,属于一个静态概念。
2. 进程
进程是程序的运行单元,程序在运行时必定会有一个或多个进程,同事进程是资源分配的最小单位
进程之间的资源是独立的;同一进程内的线程共享本进程的资源。
3. 线程
线程是程序执行的最小单位,进程中必定会有一个或多个线程,线程与进程一样也有自己独立资源空间
内核线程
指cpu的线程,通常情况下,一个cpu内核一个内核线程
某些特定的cpu具备超线程
3.1 超线程
在一个cpu里面封装两个逻辑运算单元,模拟可以同时处理两个线程,但并不是真正意义上的同时处理两个线程,所以性能提升只有30%左右
3.2 java线程
java 本身有线程对象Thread,java多线程也是java编程语言优势之一
二、java 内存模型
java内存模型有线程,工作空间,内存(主存)
1. 线程
运行java程序需要有由java线程来执行,java线程具备独立的工作空间,即线程栈
2. 工作空间
内存模型中的工作空间为线程独有,每次线程读取数据先去工作空间中的数据,没有再去主存中取,取到主存数据先工作空间运算,完成之后再更新回内存
3. 内存
属于程序的独立内存空间
三、java 虚拟机内存模型
java 虚拟机模型中包含 方法区、java堆、vmStack 、PC、native method stack
其中方法区在JDK1.8中被移除到内存中去了,减少了一种内存溢出的情况
1. 方法区
主要存放 class、 method、 static修饰的成员变量、 常量、JIT即时编译,线程共享
2. java堆
主要是存放对象值 ,线程共享
3. VM stack
存放局部变量,对象引用地址 ,线程独有
4. PC
存放线程的下一条指令 线程独有
5. native method stack
本地方法栈,调用一些native方法时会用到,线程独有
四、CPU工作模型
1. 寄存器
指令寄存器,存放指令等 寄存器除指令寄存器还有很多种
2. 逻辑运算单元
主要运算逻辑,依靠逻辑运算单元来实现,超线程就是封装连个逻辑运算单元,可以模拟cpu处理两个线程
3. L1 L2 L3三级缓存
一级缓存在cpu内部封装,一般不会特别大,同时读取数据时以缓存行读取
二级缓存与三级缓存都是在cpu外部,速度差异不大
cpu读取数据时先从一级缓存中读取,没有就读二级缓存,再是三级缓存,最后是内存