• JVM-内存模型


     VM 概念模型

    1:程序计数器(Program Counter Register)

          (1)比喻:可以看做为线程所执行的字节码的行号显示器        

        (2)与线程的关系:每个线程都有自己的程序计数器

        (3)作用:存放当前线程正在执行的虚拟机字节码指令地址

    2:虚拟机栈(VM Stack)

    帧栈

       (1)  释义:每个方法从的调用,都会创建一个帧栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到结束,就对应这一个帧栈的进栈与出栈。

      (2) StackFlowOverError:线程请求的栈深度超过了虚拟机所允许的栈深度。

      (3) OutOfMemoryErro:虚拟机动态拓展时无法申请到足够的内存。

    3:本地方法栈(Native Method Stack)

      (1)  和虚拟机栈不同的地方

          · 虚拟机栈执行的是Java服务(字节码服务)

          · 本地方法栈执行的是Native方法服务。

            Native 方法是由非Java语言实现的Java接口,如C++实现的Native方法。

        二者大同小异

      (2) 和虚拟机栈一样,也会抛出StackOverflowError和OutOfMemoryError异常。

    4:Java堆(“垃圾堆”-Heap)

      (1):所有线程共享。

      (2):虚拟机启动时创建。

      (3):垃圾收集器的主要管理区域(GC主要工作区域)。

      唯一目的就是存放对象实例。

      (4):可分为新生代和老年代,新生代又可分为Eden区、From Survivor区、To Survivor区。默认比例为8:1:1。

                

                

           如图:当新生代产生A、B、C三个对象后 。

             第1次GC:回收掉A,并将B和C从Eden区移动到From区。

              第2次GC:回收掉B,由于C两次都未能被回收,因此转移到To区。

             第3次GC:C还是未能被回收,将从To区转移到From区。

             第4次GC:C又从From区转移到To区,如此反复15次后,若C还是未能被GC....

             第16次GC:此时C应该在From区,将被移动到老年代。

    5:方法区(Method Area)

      (1):与Java堆一样,所有线程共享。

      (2):用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码 等数据。

  • 相关阅读:
    Java+seleinum+testng框架UI自动化测试环境搭建--第一节
    linux常用命令
    Linux下定时任务的查看及取消
    WampServer环境安装
    Airtest断言方法
    Pycharm创建模板头部默认
    QPS/TPS简介
    简易全文搜索引擎设计
    如何在linux下检测内存泄漏
    箱线图(boxplot)简介与举例
  • 原文地址:https://www.cnblogs.com/zgq7/p/12459926.html
Copyright © 2020-2023  润新知