订阅博客
收藏博客
微博分享
QQ空间分享

淋雨一直走,java的内存结构和内存模型,艺龙网

频道:娱乐消息 标签:qqhd剡文轩 时间:2019年05月04日 浏览:254次 评论:0条

导言

Java的内存结构与java的内存模型是两码事,常常有人搞混,有的人博客标题写着java的内存模型,正文却在介绍java的内存结构。java的内存结构和Java虚拟机的运转区域有关;而java的内存模型,是考虑Java在处理多线程时,如安在JVM中将变量存储到内存和从内存中取出变量这样的底层细节。下面咱们对java的内存结淋雨一直走,java的内存结构和内存模型,艺龙网构和java的内存模型进行介绍。

(图片来源于网络)

java内存结构

java的内存结构是指,在java运转时,java会将其办理的内存划分为几个不同的区域,这些区域都有各自的用处,如图情色艺术1所示:

图1-1 java内存结构图

图1-2 java运转时数据素秋园区

其间,图1-1是甲淋雨一直走,java的内存结构和内存模型,艺龙网骨文官方给出,经过这张图,能够了裴涩琪解怎么经过参数来操控各区域的内存大小;图1苏晴-2来自网络,其间,办法区和堆是一切线程同享的内存区域,而java栈、本地办法栈和程序员计数器是运转是线程私有的内存华润水泥供货商门户区域。

下面咱们对每一种内存区域进行介绍:

  • 程序计数器

程序计数器用于保存当时正在履行的程序的内存地址。Java是支撑多线程履行的,当有多个线程穿插履行时,被中止的线程当时履行的内媚公卿存地址,就需求被保存下来。当被中止的线程康复履行时,再依据记载的指令安全出产法地址康复到上一个线程,持续履行下去。每个线程都需求有一个独立的程序计数器,各个线程之间计数器互不影响。

  • Java栈

Java栈是与线程相关在一起的。一个线程被创立的时分,JVM就会为该线程创立与之对应的Java栈。在这个Java栈中又会包含多个栈帧,这些栈帧是与每个办法相关起来的,每运转一个办法就创淋雨一直走,java的内存结构和内存模型,艺龙网建一个栈帧,每个栈帧会含有一些局部变量、操作栈和办法返回值等信息。Java栈的栈顶的栈帧便是当时正在履行的活动栈,当活动栈陈安之中调用另淋雨一直走,java的内存结构和内存模型,艺龙网外一个办法时,与之对应的一个新的栈帧被创立,这个新创立的栈帧被放到Java栈的栈顶,变为新的活动栈。

  • java堆

堆是JVM所办理的内存强的松中最大的部分,是被一切Java线程锁同享的,不淋雨一直走,java的内存结构和内存模型,艺龙网是线程安全的,在JVM启动时创立。堆是存储Java方针的当地,一切的方针实例以及数组都要在堆上分配。

  • 办法区

办法区存放了要加载的类的信息、静态常量、final类型的常量、类中的Field信息、类中办法信息,程序中经过Class方针的getName.isInterface等办法来获取信息,都来源于方单片王法区。

  • 常量池

常量乾佑元宝池自身是办法区中的一个数据结构。常王若林量池中存储了如字符串、final变量值、类名和办法李保田名常量。常量池在编译期间就被确认,并保存在编译好的.class文件中。

  • 本地办法栈

本当地三皇五帝法图行天下栈和Java栈所发挥的效果十分类似,差异不过是Java栈为JVM履行Java办法服务,而本地办法栈为JVM远得要命的爱情履行Native办法服务。

java内存模型

内淋雨一直走,java的内存结构和内存模型,艺龙网存模型中,界说了同享内存体系中多线程读写操作行为的标准。经过这些标准完结对内张狂老奶奶存的读写操作, 然后确保指令履行的正确性淋雨一直走,java的内存结构和内存模型,艺龙网。内存模型处理了CPU多级缓存、处理器优化等问题, 确保了并发场景下的有序性、一致性、原子性。

Java内存模型的首要方针是界说程序中各个变量的拜访规矩,即在JVM中hotmovies将变量存储到内存和从内存中取出变量这样的底层细节。

JMM规则了一切的变量都存储在主内存中。每个线程还有自己的作业内存,线程的作业内存中保存了该线程使用到的变量的主内存的副本复制,线程对郯城天气预报变量的一切操作都必须在作业内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接拜访对方作业内存中的变量,线程之间值的传递都需求经过主内存来完结。

图2 java内存模型

总结

本文对java的内存结构和内存模型的内容进行了简略的介绍,其间,java的内存结构讲的是Java虚拟机运转时的不同区域,包含堆、栈等概念;而java的内存模型,是考虑Java在处理多线程时,如安在JVM中将变量存储到内存和从内存中取出变量这样的底层细节。