标签:Java 字节 虚拟机 计数器 线程 JVM 初探 执行
一个Java文件的执行流程粗略地讲就是这样:
1、javac编译器
2、类装载子系统
3、运行时数据区
3.1、程序计数器
程序计数器是一块很小的内存空间,用来记录当前线程执行字节码位置的行号,JVM就是通过程序计数器来选取下一条需要执行的字节码指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储(线程私有)。
如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。此内存区域是唯一一个在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域。
3.2、本地方法栈
native方法执行时的入栈出栈操作都在这里进行。
HotSpot虚拟机将本地方法栈和Java虚拟机栈合二为一了。
3.3、Java虚拟机栈
3.4、堆
3.5、方法区
4、字节码执行引擎
标签:Java,字节,虚拟机,计数器,线程,JVM,初探,执行 来源: https://blog.csdn.net/qq_43613793/article/details/120193955
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。