美文网首页java基础
java虚拟机内存模型

java虚拟机内存模型

作者: 天空在微笑 | 来源:发表于2017-12-03 14:50 被阅读8次

一、程序计数器
  单核cpu,每一时刻,只能有一个线程在运行,其它的线程被切换出去。为此,每个线程有一个独立的程序计数器,用于记录下一条要运行的指令。程序计数器是一块线程私有的内存空间。
  如果当前线程执行的是一个Java方法,则程序计数器记录正执行的Java字节码地址,如果当前线程正在执行的是一个native方法,则程序计数器为空。
二、Java虚拟机栈
  Java虚拟机栈也是线程的私有内存空间,它和Java线程在同一时间创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
  虚拟机栈在运行时使用一种叫做栈帧的数据结构保存上下文数据。在栈帧中,存放了方法的局部变量表、操作数栈、动态连接方法和返回地址等信息。如果方法调用时,方法的参数和局部变量相对较多,那么栈帧中的局部变量表就会比较大,栈帧会膨胀以满足方法调用所需传递的信息,因此,单个方法调用所需的栈空间大小也会比较多。
三、本地方法栈
  本地方法栈和Java虚拟机栈的功能很相似,Java虚拟机栈管理Java函数的调用,而本地方发栈用于管理本地方法的调用。本地方法是使用c语言实现的。在sun的hot spot虚拟机中,不区分本地方法栈和虚拟机栈。因此,和虚拟机栈一样,它会抛出stackoverflowError和outofmemoryError。
四、Java堆
  Java堆,几乎所有对象和数组都是在堆中分配空间的。Java堆分为新生代和老年代两个部分,新生代用于存放刚刚产生的对象和年轻对象,如果对象一直没有被回收,生存得足够长,老年对象就会被移入老年代。
五、方法区
  方法区与堆空间类似,也是线程共享的。方法区主要保存的信息是类的元数据。
  方法区中最为重要的是类的类型信息、常量池、域信息、方法信息。类型信息包括类的完整名称、父类的完整名称、类型修饰符和类型的直接接口类表;常量池包括这个类方法、域等信息所引用的常量信息;域信息包括域名称、域类型和域修饰符;方法信息包括方法名称、返回类型、方法参数、方法修饰符、方法字节码、操作数栈和方法帧栈的局部变量区大小以及异常表。总之,方法区内保持的信息,大部分来自class文件,是Java应用程序运行必不可少的重要数据。

相关文章

  • 并发编程(一)—— volatile关键字和 atomic包

    Java内存模型 JMM(java内存模型) java虚拟机有自己的内存模型(Java Memory Model,...

  • Java内存模型

    Java内存模型 主内存和工作内存 Java虚拟机规范中定义了Java内存模型(Java Memory Model...

  • 深入理解volatile

    JMM Java 内存模型 Java的内存模型指定了Java虚拟机如何与计算机的内存进行工作 Java内存模型决定...

  • 37-Java内存模型

    Java内存模型 Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(...

  • 【转】Java 内存模型

    转自Java 内存模型 Java 内存模型规范了 Java 虚拟机与计算机内存是如何协同工作的。Java 虚拟机是...

  • Java内存模型和垃圾回收

    1、 Java虚拟机内存模型 Java虚拟机内存模型是Java程序运行的基础。为了能使java应用程序正常运行,...

  • Java运行时数据区

    Java内存模型 Java内存模型,就是Java程序运行时的内存模型。而Java代码是在Java虚拟机上运行的,由...

  • java内存模型

    1.Java内存模型的概念 Java内存模型(Java Memory Model,JMM)是java虚拟机规范定义...

  • Happens-Before和Volatile关键字解析

    Java内存模型 Java虚拟机中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽...

  • 【JAVA提升】- Java内存模型

    1 什么是java内存模型 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM...

网友评论

    本文标题:java虚拟机内存模型

    本文链接:https://www.haomeiwen.com/subject/cfmobxtx.html