美文网首页
CPU,进程,线程,栈,堆,方法区的关系(JAVA)

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

作者: Mr_Elliot | 来源:发表于2019-05-29 15:38 被阅读0次
1. 线程是什么?进程是什么?

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

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

2. 进程和线程的关系

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


进程和线程的关系

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

程序计数器是一块内存区域,用来记录线程当前要执行的指令地址,归线程私有。
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 加载的类、常量及静态变量等信息,也是线程共享的 。

相关文章

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

    1. 线程是什么?进程是什么? 线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行...

  • JVM运行时数据区

    线程共享:Java堆,方法区线程私有:本地方法栈,Java虚拟机栈,程序计数器 Java堆:存放的就是我们new出...

  • 100字写点东西_JVM_20180002

    java内存模型-线程私有内存区-虚拟机栈-本地方法栈-程序计数器-线程共享内存区-堆内存-方法区 java类加载...

  • Day3 JVM分区

    分区: 堆:xss参数,cpu高速缓冲区. 栈: 本地方法栈: 方法区(1.8后的元空间): 各个线程共享的区域...

  • Jvm内存模型与垃圾回收

    内存模型 JVM内存空间包含:方法区、java堆、java栈、本地方法栈。 方法区是各个线程共享的区域,存放类信息...

  • JVM内存区域的一些理解

    JAVA的JVM内存空间分为三个重要区域:堆、栈和方法区 栈区 线程私有。每个线程有自己的栈区,栈中只保存了方法中...

  • 第一节

    Java虚拟机运行时数据区 方法区、堆、虚拟机栈、本地方法栈、程序计数器所有线程共享的数据区:方法区和堆线程范围内...

  • JVM笔记(七):方法区

    原创文章,转载请注明原文章地址,谢谢! 从线程共享与否的角度看栈、堆、方法区的关系 栈、堆、方法区的交互关系 官方...

  • JVM内存布局

    JVM虚拟机内存结构,以及它们的作用 线程私有:栈区,本地方法栈,pc指针线程共有:方法区,堆区 JAVA的JVM...

  • 栈、堆、方法区

    JAVA的JVM的内存可分为3个区:栈(stack)、堆(heap)、方法区(method) 栈区: 每个线程包含...

网友评论

      本文标题:CPU,进程,线程,栈,堆,方法区的关系(JAVA)

      本文链接:https://www.haomeiwen.com/subject/rrcytctx.html