
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发是目前大多数软件开发程序员都在学习的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程线程运行原理。
我们都知道JVM中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。
每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
具体就是:
1.将编译好的字节码加载到jvm的方法区内存中
2.jvm启动一个main的主线程,cpu核心就准备运行主线程的代码了,给主线程分配自己的栈内存【args、局部变量、返回地址、所记录】,每个线程的栈里面还有个程序计数器
程序计数器的作用:当cpu要执行哪行代码了,就去这个里面去要
3.把主方法的里面代码行放到程序计数器
4.主方法调用的是method1的方法,为method1分配栈内存,里面存储这个方法里面局部变量,返回地址,这些变量是分配内存时,会把空间预留好
5.将method1的一行读到程序计数器让cpu执行
6.methode1下一行调用method2()方法,创建他的栈内存
7.把Objectn=newObject()这行代码读取到计数器,在队中创建对象
8.method2()将返回地址给m,方法执行完就可以释放掉method2()的栈内存
9.一层层方法结束后,依次释放掉每个方法线程
线程上下文切换(ThreadContextSwitch)
因为以下一些原因导致cpu不再执行当前的线程,转而执行另一个线程的代码(简单来说就是从使用cpu到不使用cpu)
线程的cpu时间片用完
垃圾回收
有更高优先级的线程需要运行
线程自己调用了sleep、yield、wait、join、park、synchronized、lock等方法
当ContextSwitch(上下文切换)发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java中对应的概念就是程序计数器(ProgramCounterRegister),它的作用是记住下一条jvm指令的执行地址,是线程私有的
状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等
ContextSwitch频繁发生会影响性能,因为线程数不是越多越好。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。