美文网首页
为什么JVM内存区域分为线程共享和非线程共享

为什么JVM内存区域分为线程共享和非线程共享

作者: 凉风拂面秋挽月 | 来源:发表于2019-11-11 10:58 被阅读0次

多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack ( 本地方法栈 ),其中Method Area(方法区) 和 Heap (堆)是线程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非线程共享的。为什么分为 线程共享和非线程共享的呢?请继续往下看。

首先我们熟悉一下一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。那么程序开始运行后,都是如何涉及到各内存区域的呢?

概括地说来,JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。

相关文章

  • JVM从入门到精通系列(二):JVM内存区域及运行时内存

    JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA ...

  • JVM内存模型

    JVM内存区域 JVM内存区域主要分为线程私有区域【程序计数器,虚拟机栈,本地方法栈】,线程共享区域【JAVA堆,...

  • 为什么JVM内存区域分为线程共享和非线程共享

    多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Pro...

  • jvm笔记

    JVM的内存模型是什么样子的? JVM内存模型可以大致可划分为线程私有区域和共享区域,线程私有区域由虚拟机栈、本地...

  • 2.JVM的内存区域

    一、内存区域(线程共享区-非线程共享区) JVM初始运行的时候都会分配好Method Area(方法区)和Heap...

  • 关于JVM内存模型的理解。

    JVM内存划分 JVM内存划分为线程共享区和线程独占区两部分,线程共享区包括方法区(Method Area)和堆(...

  • Java程序员必会知识——JVM内存模型

    JVM基本结构 JVM内存区域主要分为 、 和 。 概念介绍 方法区(线程共享数据区域) 主要存放JVM加载的类信...

  • 2021-02-23-jvm

    1、请介绍⼀下 JVM 内存模型?⽤过什么垃圾回收器 Java内存模型结构分为线程共享区和线程私有区 线程共享区:...

  • jvm内存结构

    jvm内存 一条线线程共享 线程不共线【也叫非线程共享】 线程共享: 堆【Heap】、 方法区【method ar...

  • JVM虚拟机内存区域

    JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直...

网友评论

      本文标题:为什么JVM内存区域分为线程共享和非线程共享

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