获得徽章 0
- #挑战每日一条沸点#
● JVM内存空间:分为运行时数据区与本地内存。
● 运行时数据区:
1. 线程共享:堆(字符串常量池)
2. 线程私有:程序计数器、虚拟机栈、本地方法栈
● 本地内存:
1. 线程共享:元空间(原方法区):运行时常量池
2. 线程共享:直接内存
● 栈帧都拥有:局部变量表、操作数栈、动态链接、方法返回地址。
● 局部变量表:主要存储了各种编译期可知的各种数据类型、对象引用
● 操作数栈:主要储存方法调用的中间结果,如:计算过程中的临时变量。
● 动态链接:通常用于一个方法中调用另一个方法的场景,将符号引用转换为方法的直接引用。符号引用一般在类的常量池中,通常为类的全限定名,必须要通过解析和加载才能获得直接内存地址。直接引用则不需要解析加载就是内存地址的指针。
● 函数调用陷入无限循环,会导致压入的栈过多,栈的深度变大。如果超过最大深度则抛出StackOverFlowError。
● StackOverFlowError:栈不允许动态拓展,则超过最大深度抛出异常。
● OutOfMemoryError:栈允许动态拓展,无法申请到足够的内存空间抛出异常。展开评论点赞