JavaThread:Java线程在虚拟机的实现

前言:JavaThread,JVM中C++的一个数据结构,用来表示Java的线程在JVM的实现,Threads::create_vm是虚拟机的创世纪。

JAVA的main线程

         当一个Java程序启动运行时,必然伴随这一个Java main线程,用来总领Java的各种实现。为什么Java main线程有这个能力,它实际又是什么呢?

         当Java启动应用程序时,操作系统会定位到Java启动器的 main函数,Java启动器调用JavaMain完成一个程序的生命周期。

        JavaMian函数里面,包含一个InitializeJVM函数,InitializeJVM会调用JNI函数JNI_CreateJavaVM初始化虚拟机,JNI_CreateJavaVM又会将初始化虚拟机的任务委派给Threads::create_vm。Threads::create_vm是虚拟机的创世纪,几乎所用的HotSpot VM组件都会在这一步初始化和创建。

        此时,Threads::create_vm中会创建一个JavaThread结构,然后由record_stack_base_and_size()将当前操作系统线程(即执行Threads::create_vm代码的线程)的栈顶地址和栈大小保存到这个JavaThread结构,set_as_starting_thread()将当前操作系统线程的id保存到JavaThread中,这样一来,当前这个JavaThread就可以代表当前操作系统线程

        当前操作系统后续会解释Java字节码,而Java main方法会通过字节码解释执行的,因此执行Java main的线程是Java 主线程,这里创建的JavaThread数据结构也就是常说的Java主线程

Java的Thread对象

        JavaThread数据结构,是Java线程对象java.lang.Thread在JVM层的表示.

        JavaThread持有一个指向java.lang.Thread对象的指针,即oop(oop是jvm中,c++的一个类,也是Java对象在jvm的C实现,类的别名为oopDesc),JavaThread类中一个属性为 oop _threadObj,这个_threadObj便包含了Java的thread对象数据,java.lang.Thread也持有一个指向JavaThread的指针,即Java thread对象中的一个属性值,long整型的eetop字段,eetop字段表示的JavaThread所代表的操作系统线程id。

jvm中的JavaThread数据结构

        jvm中,JavaThread是C++的一个类,他在Thread.hpp文件中,继承于Thread类。相当于操作系统线程OSThread和Java层面的线程Thread对象的中转和链接,它含有OSThread的数据和java.lang.Thread对象的数据,它作为OSThread的载体拥有指向java.lang.thread对象的指针,也将OSThread的信息,如操作系统线程id的值,传给java.lang.thread对象的long整型eetop字段,便于java.lang.Thread线程对象找到对应的操作系统线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值