• 理解JVM模型


    概括

    JVM运行时数据区可以划分为5部分,分别是:程序计数器、虚拟机栈、本地方法栈、堆、方法区

    程序计数器(Program Counter Register)

    相当于当前线程所执行字节码的行号指示器。
    程序计数器是线程隔离的。
    程序计数器区域是以上五个区域中唯一一个不会报OutOfMemoryError的区域。

    虚拟机栈(VM Stack)

    每个方法在执行时都会创建一个栈桢(存放局部变量表,操作数栈等),每个方法的嗲欧勇和执行完成,就代表着栈桢在虚拟机栈中入栈和出栈的过程。简单地说,虚拟机栈就是为JVM执行java方法(字节码)的区域。
    虚拟机栈是线程隔离的。
    当线程请求的栈深度大于虚拟机栈的深度时,StackOverFlowError。
    当虚拟机栈需要扩展且无法申请到足够内存时,OutOfMemoryError。

    本地方法栈(Native Method Stack)

    类似于虚拟机栈的解释,简单说本地方法栈就是为JVM提供Native方法服务。
    Native方法:java程序调用非java语言实现的接口,比如底层的一些驱动硬件的接口,以C语言实现。

    堆(Heap)

    存放实例对象以及数组,可划分为Eden,From Survivor,To Survivor。在物理内容上可以是不连续的,堆是可扩展的(-xmm,-xms参数),当堆中无空间来为实例对象分配内存且堆无法扩展空间时,OutOfMemoryError。

    方法区(Method Area)

    存储JVM的类加载信息、常量、静态变量等,又称为Non-Heap,常量池也为方法区的一部分。


    附上一张HotSpot模型图

  • 相关阅读:
    关于LockSupport
    Sqrtx
    Text Justification
    Unique Paths II
    N-Queens
    Anagrams
    CSipSimple通话记录分组
    CSipSimple配置系统
    Permutations II 再分析
    CSipSimple的插件结构
  • 原文地址:https://www.cnblogs.com/guodongdidi/p/10073163.html
Copyright © 2020-2023  润新知