
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
虚拟机是java程序员需要重点掌握的一个编程开发技术,而今天我们就通过案例分析来了解一下,java虚拟机程序计数器与虚拟机栈基础知识。
一、程序计数器
程序计数器是一块很小的内存空间,用于存放下一条运行的指令,它是线程私有的,可以认作为当前线程的行号指示器。
由于Java是支持线程的语言,当线程数量超过CPU数量时,线程之间根据时间片轮询抢夺CPU资源。对于单核CPU而言,每一时刻,只能有一个线程在运行,而其他线程必须被切换出去。为此,每一个线程都必须用一个独立的程序计数器,来记录下一条要运行的指令。各个线程之间的计数器互不影响,独立工作。
如果当线程正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。
二、虚拟机栈(栈)
栈保存的是方法的局部变量、部分结果,并参与方法的调用和返回,即:栈帧数据。
1.栈帧
每个方法被执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接方法、返回地址等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈(方法调用)到出栈(方法返回)的过程。
2.栈溢出、内存溢出
Java虚拟机规范中允许栈的大小是动态的或者是固定的,定义了两种异常与栈空间相关:StackOverflowError和OutOfMemoryError。如果线程在计算过程中,请求的栈深度大于大可用的栈深度,则会抛出StackOverflowError异常,如果栈能够动态扩展,而在扩展过程中,没有足够的内存空间来支持栈的扩展,则会抛出OutOfMemoryError异常。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。