java线程原理和linux原生线程,线程的实现原理

  java线程原理和linux原生线程,线程的实现原理

  00-1010堆栈和堆栈帧线程之间的上下文切换摘要

  

目录

JVM由堆、栈和方法区组成,其中栈内存分配给线程。每个线程启动后,虚拟机都会为其分配一个堆栈内存。

 

  每个堆栈由多个堆栈帧组成,对应每个方法调用占用的内存‘每个线程只能有一个活动堆栈帧,对应当前正在执行的方法公共类main { public static void main(string[]args){ method 1(10);}私有静态void method 1(int x){ int y=x 1;对象m=method 2();system . out . println(m);}私有静态对象method 2(){ Object n=new Object();返回n;}}首先加载类,类信息进入方法区。

  类加载后,jvm会用一个main的线程启动一个主线程,并为该线程分配一个堆栈内存,同时分配给任务调度器执行。分配时间片时,给main方法分配一个堆栈帧内存。

  计数器存储要执行的下一条语句的位置,执行main方法的method1语句,调用method1方法,并为method1方法分配堆栈帧。

  同时method1中调用method2方法,jvm为method 2分配堆栈帧。

  执行完method2后,释放method2的堆栈帧内存,执行method 2返回地址的代码。

  随后的执行将不再详细描述。随着每个方法的执行结束,它将依次从堆栈中释放。

  00-1010由于以下原因,cpu不再执行当前线程,而是执行另一个线程的代码。

  当线程的cpu时间片用完垃圾收集时,垃圾收集会停止所有当前工作的线程,执行GC的线程有更高的优先级需要运行。线程本身调用sleep、yield、wait、join、park、synchronized、lock等方法。当上下文切换发生时,操作系统需要保存当前线程的状态。并恢复另一个线程的状态。Java中对应的概念是程序计数器,记录下一个jvm的执行地址,是线程私有的。

  包括程序计数器,虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等。频繁发生上下文切换会影响性能。

  

栈与栈帧

本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: