资讯专栏INFORMATION COLUMN

Java 虚拟机总结 - JVM 内存区域

2bdenny / 3160人阅读

摘要:虚拟机运行时数据区虚拟机在执行程序的过程中会把它所管理的内存划分为若干个不同的数据区域,以下是虚拟机所管理的运行时数据区程序计数器和寄存器来存放下一条指令地址类似,的程序计数器可看作当前线程所正在执行不是下一条的字节码的行号指示器。

Java 虚拟机( Java Virtual Machine,缩写为 JVM ):是一种能够运行 Java 程序的抽象计算机。

特点:实现 Java 平台无关性,使得编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而由 JVM 执行。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),再由 JVM把字节码解释成具体平台上的机器指令执行,就可以在多种平台上不加修改地运行。

Java 虚拟机运行时数据区

Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域,以下是 Java 虚拟机所管理的运行时数据区:

程序计数器

和 pc 寄存器来存放下一条指令地址类似,JVM 的程序计数器可看作当前线程所正在执行(不是下一条)的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时可以通过改变这个计数器的值来选取下一条需要执行的字节码指令。

Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行的时间来实现的,在任何确定的某个时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都有一个独立的程序计数器,即线程私有。

Java 虚拟机栈

描述了 Java 方法 执行的内存模型,即存放每个方法执行时创建的栈帧,用于存放局部变量表、操作数栈、动态链接、返回地址等信息,线程私有。

本地方法栈

类似于 Java 虚拟机栈执行 Java 方法服务,本地方法栈则为虚拟机使用到的 Native 方法服务,线程私有。

Java 堆

存放分配的对象实例及数组,可以处于物理上不连续的内存空间,只要逻辑连续即可,线程共享,区域主要由垃圾收集器管理。

方法区

存储一个类的结构信息,例如运行时常量池、成员变量和方法数据等,线程共享。
注意:方法区≠永久代(Permanent Generation),仅仅是因为HotSpot虚拟机中使用永久代来实现方法区,以此像管理堆内存一样来管理方法区而已。

运行时常量池

方法区的一部分,用于存放编译期间生成的各种字面量(文字所表示的取值,即固定值,对于 String 而言,形如 String str="hello"这种属于字面量,有专门的字符串池进行保存,形如String str = new String("hello")这种不属于字面量,则是在堆上分配)和符号引用(相当于Linux中一个文件的软链接,在该类实际执行时,才把符号引用转为直接引用)。

本文发表于个人博客:http://lavnfan.github.io/,欢迎指教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66030.html

相关文章

  • JVM系列(一):深入详解JVM 内存区域总结

    摘要:一内存区域虚拟机在运行时,会把内存空间分为若干个区域,根据虚拟机规范版的规定,虚拟机所管理的内存区域分为如下部分方法区堆内存虚拟机栈本地方法栈程序计数器。前言 在JVM的管控下,Java程序员不再需要管理内存的分配与释放,这和在C和C++的世界是完全不一样的。所以,在JVM的帮助下,Java程序员很少会关注内存泄露和内存溢出的问题。但是,一旦JVM发生这些情况的时候,如果你不清楚JVM内存的...

    Aldous 评论0 收藏0
  • 《深入理解java虚拟》学习笔记系列——java内存区域划分

    摘要:运行时数据区域的学习,是学习以及机制的基础,也是深入理解对象创建及运行过程的前提。了解内存区域划分,是学习概念的前提。 Java 运行时数据区域的学习,是学习 jvm 以及 GC 机制的基础,也是深入理解 java 对象创建及运行过程的前提。废话不多说,直接进入正题: 一张图总结 showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...

    史占广 评论0 收藏0
  • Java程序员:不识Jvm真面目,只缘身在增删查改中

    摘要:编译器只需面向,生成能理解的代码或字节码文件。源文件经编译器,编译成字节码程序,通过将每一条指令翻译成不同平台机器码,通过特定平台运行。涨见识,字节码执行过程分析。解决办法减少默认栈的容量来换取更多的线程支持。 前言 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的...

    or0fun 评论0 收藏0
  • Java程序员:不识Jvm真面目,只缘身在增删查改中

    摘要:编译器只需面向,生成能理解的代码或字节码文件。源文件经编译器,编译成字节码程序,通过将每一条指令翻译成不同平台机器码,通过特定平台运行。涨见识,字节码执行过程分析。解决办法减少默认栈的容量来换取更多的线程支持。 前言 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的...

    ivydom 评论0 收藏0
  • JVM 内存模型

    摘要:是描述方法执行的内存模型每个方法执行的时候会同时创建一个栈帧,用于存储局部变量表操作数栈动态连接返回地址方法出口等信息。虚拟机是使用局部变量表完成参数值到参数变量表的传递过程。堆内存管理最大的一块。 showImg(https://segmentfault.com/img/bVLqsv?w=475&h=398); 1. 虚拟机栈 VM Stack 线程私有,生命周期与线程相同。VM S...

    SexySix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<