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方法准备的空间。

  • 相关阅读:
    oracle中查询表中先排序再取出前10条数据
    oracle中的数据类型
    读取Oracle中的clob字段
    实现json的序列化和反序列化
    在oracle中where 子句和having子句中的区别
    Oracle Clob字段保存时提示字符串过长
    读取文件夹中的文件并修改数据库中的数据
    【转】display:none与visible:hidden的区别
    实现http访问
    动态生成并执行SQL语句
  • 原文地址:https://www.cnblogs.com/caobojia/p/6849999.html
Copyright © 2011-2022 走看看