CPU,进程,线程,栈,堆,方法区的关系(JAVA)

1. 线程是什么?进程是什么?

线程是进程中的一个实体,线程本身是不会独立存在的.
进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度额基本单位,线程则是进程的一个执行路径。一个进程中至少有一个线程,进程中的多个线程共享进程资源.

操作系统在分配资源的时候是把资源分配给进程,但是CPU的资源比较特殊,它是被分配到线程的。因为真正要占用CPU运行的是线程,所以也说线程是CPU的基本单位.

2. 进程和线程的关系

在Java中,当我们启动了main函数的时候其实就是启动了一个JVM的进程,而main函数所在的线程就是这个进程中的一个线程,也称主线程。


13226573-23dd01877d88cfba.png
进程和线程的关系

一个进程中有多个线程,多个线程共享进程中的堆和方法区的资源。 但是每个线程都有自己的程序计数器和栈区域.

程序计数器是一块内存区域,用来记录线程当前要执行的指令地址,归线程私有。
CPU一般是使用时间片轮转的方式让线程轮询占用,所以当前线程CPU时间片用完之后就会让出CPU.等到下次轮询的时候再执行.
而程序计数器就是记录当该线程让出CPU的时候的执行地址,等到下次再分配到时间片的时候线程就可以从自己私有的计数器上的指定地址继续执行。

3. Java 的native方法

简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

介绍完了Native方法之后,接着上面的程序计数器 如果执行的是Native方法,那么 pc 计数器记录 的是 undefined 地址,只有执行的是 Java 代码时 pc 计数器记录的才是
下一条指令的地址 。

另外每个线程都有自 己的栈资源,用于存储该线程的局部变量,这些局部变量是该线
程私有的,其他线程是访问不了的,除此之外枝还用来存放线程的调用栈帧 。
堆是一个进程中最大的一块内存,堆是被进程中的所有线程共享的,是进程创建时分
配的,堆里面主要存放使用 new 操作创建的对象实例 。
方法区则用来存放 JVM 加载的类、常量及静态变量等信息,也是线程共享的 。

猜你喜欢

转载自blog.csdn.net/weixin_33873846/article/details/91013955