zoukankan      html  css  js  c++  java
  • JVM的内存结构

    Java是按照运行时数据的存储结构来划分内存结构的,java虚拟机规范将java运行时的诗句划分为6种:

    1.PC寄存器

    用于保存当前执行程序的内存地址,同时java程序是多线程的,不可能一直都按照线性执行下去,当有多个线程交叉执行时,被中断的线程程序当前执行到哪条的内存地址需要记录下来。

    2.java栈

    java栈是与线程相关到一起的,每当创建一个线程时,JVM就会为这个线程创建一个java栈,这个hava栈中含有很多的栈帧,栈帧是与每个方法关联起来的,每运行一个方法就会创建一个栈帧。每个栈帧内部会有变量,操作栈与方法返回值等信息。

    每当一个方法执行完成时,战歌栈帧就会弹出战阵的元素作为这个方法的返回值,并清除这个栈帧。java栈顶就是当前正在执行的活动栈。PC寄存器也会执行这个位置。当这个栈帧调用另外一个方法时,与之对应的新的栈帧又被创建,并放在栈顶。

    java栈中的诗句不是共享的。不会存在同步锁的问题。

    3.堆

    存放java的对象。

    堆是被所有的java线程所共享的,要注意同步问题。

    4.方法区

    JVM方法区适用于存储类结构的地方,比如在class解析过程中,都会存到这个区域。

    方法区属于永久区的一部分,这个区域被所有的线程所共享。大小可以通过参数来控制。

    这个方法区存储的大小一般在程序启动后的一段时间就会确定了。需要加载的类通常都已经加载到jvm中了。如果项目中存在对类的动态编译,需要观察方法区的大小是否满足类存储。

    5.运行时常量池

    6.本地方法栈

    是为native方法准备的空间。

  • 相关阅读:
    ASP.net 网站项目:Fckeditor使用StepByStep
    SQL2005触发器写法
    Android 中 PopupWindow使用
    storyboard学习笔记-1
    判断两矩形是否相交
    CListCtrl 使用
    字符串和数字之间的转换(Unicode)
    【转】全特化/偏特化
    判断点是否在多边形内——射线法
    c++强制转化
  • 原文地址:https://www.cnblogs.com/caobojia/p/6849999.html
Copyright © 2011-2022 走看看