课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java虚拟机是每一个Java程序员在学习编程技术的时候都需要重点掌握的一个核心知识点,而今天我们就通过案例分析来了解一下,Java虚拟机内存模型基础知识。
1.栈帧
每个方法被执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接方法、返回地址等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈(方法调用)到出栈(方法返回)的过程。
2.栈溢出、内存溢出
Java虚拟机规范中允许栈的大小是动态的或者是固定的,定义了两种异常与栈空间相关:StackOverflowError和OutOfMemoryError。如果线程在计算过程中,请求的栈深度大于大可用的栈深度,则会抛出StackOverflowError异常,如果栈能够动态扩展,而在扩展过程中,没有足够的内存空间来支持栈的扩展,则会抛出OutOfMemoryError异常。
3.jclasslib工具
篇外话,但觉得还是有必要提出来,在研究JVM时,总是会去研究一些字节码指令、Class类文件结构、大小等数据,而jclasslib工具恰恰满足这些,有了它更有助于我们对Java、JVM有更深入的了解。
大家可根据自己的喜好,选择安装,有单机软件版、IDE插件可供使用,在此,我选择的是在idea中安装了jclasslib插件,方便使用。此工具将伴随着你在JVM的世界里翱翔,一探JVM究竟。
4、本地方法栈
本地方法栈和虚拟机栈的功能很相似,虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。
本地方法并不是用Java实现的,而是使用C实现的。本地方法栈保存的是native方法的信息,当一个JVM创建的线程调用native方法后,JVM不再为其在虚拟机栈中创建栈帧,JVM只是简单地动态链接并直接调用native方法。
5、堆
堆可以说是Java运行时内存中为重要的部分,几乎所有的对象和数组都是在堆中分配空间的。堆分为新生代和老年代两部分,新生代用于存放刚刚产生的对象和年轻的对象,如果对象一直没有被收回,生存得足够长,老年对象就会被移入老年代。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。