发布者:上海IT外包来源:http://www.lanmon.net点击数:1301
蓝盟IT小贴士,来喽!
这里所说的线程是指程序执行中的线程实体。 JVM允许一个应用程序同时运行多个线程。 hotspot JVM Java线程与本机操作系统线程直接映射关系。 准备好线程本地存储、缓冲区分配、同步对象、堆栈、程序计数器等之后,将为操作系统创建本机线程。 退出Java线程时,将收回本机线程。 操作系统将计划所有线程,并将其分配给所有可用的CPU。 初始化本机线程时,将调用Java线程的run ()方法。 如果返回run (),则不捕获异常,本地线程将检查是否通过其终止来终止JVM进程(例如,该线程是最后一个非守护进程线程)。 线程结束时,本地线程和Java线程的所有资源都将被释放。
PC是当前命令(或操作码)的地址,本地命令除外。 如果当前方法是native方法,则PC的值为undefined。 所有的CPU都有PC。在典型的状态下,由于每次执行指令时PC会增加,所以PC存储有执行下一指令的地址。 JVM使用PC追踪执行指令的地方,PC实际上是指向方法领域的存储器地址。
每个线程都有自己的堆栈,堆栈包含每个方法执行的堆栈框架。 由于堆栈是后推(LIFO )数据结构,当前正在运行的方法位于堆栈的顶部。 每次调用该方法时,都会创建一个新的堆栈帧并将其堆栈在堆栈顶部。 如果方法成功返回或抛出未捕获的异常,则堆栈框架将被堆栈。 堆栈不能直接操作,除了堆栈框架中的堆栈和堆栈。 可以在堆栈上分配堆栈帧,不需要连续内存。
并非所有JVM实现都支持本机方法。 支持的JVM通常为每个线程创建本机方法栈。 JVM使用C-linkage模型实现JNI(Java Native Invocation )时,本地堆栈是c的堆栈。 在这种情况下,本地方法栈的参数顺序和返回值与常规c程序相同。 本地方法通常可以调用JVM的Java方法(取决于JVM实现)。 本机方法调用Java发生在堆栈(通常是Java堆栈)中,线程离开本地方法堆栈,并在Java堆栈中打开新的堆栈帧。
文/IT外包网管服务 上海蓝盟编辑
分享到: