zoukankan      html  css  js  c++  java
  • JVM运行时数据区与JVM堆内存模型小结

    前提

    JVM运行时数据区和JVM内存模型是两回事,JVM内存模型指的是JVM堆内存模型。


    那JVM运行时数据区又是什么?

    它包括:程序计数器、虚拟机栈、本地方法栈、方法区、堆。


    来看看它们都是干嘛的

    程序计数器:保存当前线程执行的指令的地址(大意如此)。

    虚拟机栈:由栈帧组成,而每个栈帧又包括局部变量表操作数栈动态连接(调用其他方法)、出口(被调用时返回值) -- 每个栈帧就代表了一个方法的执行。

    本地方法栈:类似虚拟机栈,只不过方法改成了native方法。

    方法区:保存了类的各种信息、类的常量、类的静态变量 -- 请注意,不包括类的普通变量!

    :各种对象所在。


    前三者都是线程内的资源,所以不会存在同步问题!

    其实按照咕泡学院海天老师的说法是,程序计数器、虚拟机栈、本地方法栈 这三个对应了冯诺依曼结构中的运算器、控制器;而方法区、堆则对应了冯诺依曼结构中的IO和存储器。耳目一新!


    再来看看JVM堆内存模型

    我们常说的新生代、老年代、永久代(JDK1.8之后变成了MetaSpace),就是JVM堆内存模型!






    最后,很多书上(包括教科书)都把堆(heap)叫做堆栈,而把栈(stack)叫做栈,个人觉得这是一种很扯淡的叫法。


    待续。

  • 相关阅读:
    git命令
    WPF让绑定支持表达式
    WPF多语言动态切换的一种方法
    C#监测系统事件,睡眠状态
    记一次渗透测试
    Relay
    ECShop相关漏洞复现/分析
    人工智能学习路线图
    抽奖算法
    关于微信开发的 appid,openid,unionid
  • 原文地址:https://www.cnblogs.com/larryzeal/p/7425282.html
Copyright © 2011-2022 走看看