JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈

本文章对应书中2.2.3节内容。

本地方法:

在讲本地方法栈之前我们先说一下本地方法:
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈
用native修饰的都是本地方法,如Object的getClass方法。
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈

本地方法栈

  • Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用
  • 本地方法栈,也是线程私有的
  • 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)
    • 如果西安城请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常
    • 如果本地方法栈可以动态扩展,并且尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机会抛出一个OutOfMemoryError异常。
  • 本地方法栈是使用C语言实现的
  • 它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载本地方法库。

JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈
JVM(六) -- 内存与垃圾回收(二) -- 运行时数据区(三) -- 本地方法栈