摘要:虚拟机运行时数据区虚拟机在执行程序的过程中会把它所管理的内存划分为若干个不同的数据区域,以下是虚拟机所管理的运行时数据区程序计数器和寄存器来存放下一条指令地址类似,的程序计数器可看作当前线程所正在执行不是下一条的字节码的行号指示器。
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的管控下,Java程序员不再需要管理内存的分配与释放,这和在C和C++的世界是完全不一样的。所以,在JVM的帮助下,Java程序员很少会关注内存泄露和内存溢出的问题。但是,一旦JVM发生这些情况的时候,如果你不清楚JVM内存的...
摘要:运行时数据区域的学习,是学习以及机制的基础,也是深入理解对象创建及运行过程的前提。了解内存区域划分,是学习概念的前提。 Java 运行时数据区域的学习,是学习 jvm 以及 GC 机制的基础,也是深入理解 java 对象创建及运行过程的前提。废话不多说,直接进入正题: 一张图总结 showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...
摘要:编译器只需面向,生成能理解的代码或字节码文件。源文件经编译器,编译成字节码程序,通过将每一条指令翻译成不同平台机器码,通过特定平台运行。涨见识,字节码执行过程分析。解决办法减少默认栈的容量来换取更多的线程支持。 前言 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的...
摘要:编译器只需面向,生成能理解的代码或字节码文件。源文件经编译器,编译成字节码程序,通过将每一条指令翻译成不同平台机器码,通过特定平台运行。涨见识,字节码执行过程分析。解决办法减少默认栈的容量来换取更多的线程支持。 前言 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的...
阅读 2391·2021-11-25 09:43
阅读 1226·2021-11-24 09:39
阅读 709·2021-11-23 09:51
阅读 2364·2021-09-07 10:18
阅读 1810·2021-09-01 11:39
阅读 2743·2019-08-30 15:52
阅读 2556·2019-08-30 14:21
阅读 2828·2019-08-29 16:57