Java 内存数据模型

  • 先说说几个基本概念,后面再总结java内存数据模型。

内存储器 :主存,指内存条,分为只读存储器 ROM(数据已永久保存,在可读芯片上))、随机存储器RAM(可读写,断电即消失),一般说到内存,指的是计算机的随机储存器(RAM)
外存储器:硬盘、U盘、光盘及软盘
寄存器:在 cpu 内部,速度最快。

高级缓存(Cache):它是介于CPU与内存之间,常用有一级缓存(L1)、二级缓存(L2)、三级缓存(L3)(一般存在于Intel系列)。它的读写速度比内存还快,当CPU在内存中读取或写入数据时,数据会被保存在高级缓冲存储器中,当下次访问该数据时,CPU直接读取高级缓冲存储器,而不是更慢的内存。

CPU <-[Cache(L1、L2、L3)]-内存 <--硬盘
三者之间的关系:
简单来说,硬盘用来存储我们的程序和数据,当我们运行程序的时候,CPU首先接受到我们的命令,之后CPU是告诉硬盘,我要运行你存储的程序A,你把程序A送到内存去。
CPU对内存说,我让硬盘把程序A送到你这里来了,你保存一下。 等程序A被完整的送到内存之后。CPU就开始执行程序A。

 

  • 在JAVA中,内存模型:有六个不同的地方可以存储数据。

1、寄存器 : 在 CPU内部,是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的 程序计数器,互不影响,--> 线程私有。
2、栈【包含java虚拟机栈、本地方法栈】    : 方法里的变量、参数,一般指局部变量,方法返回值 ,对象的引用? -->线程私有的,是线程安全的。
3、堆     : new创建的对象、数组,还有实例变量  -->被所有的线程共享。
4、静态区(全局区): 静态变量【类变量】,类的类型信息  -->被所有的线程共享,是在程序中永远的唯一的元素。
5、只读区(常量区【只读数据】+代码区【程序指令】): 常量final、程序代码                            -->被所有的线程共享

6、非RAM存储,其他存储方式,不放置在内存中。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

方法区这个概念是在 JVM 的数据区里面出现的,包含4、5两个,一般存放类的基本信息
这里再讲一下,JDK1.7之前运行时常量池是方法区的一部分,JDK1.7及之后版本已经将运行时常量池从方法区中移了出来,在堆(Heap)中开辟了一块区域存放运行时常量池。
运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。

  • 上面的2-5存放于内存中


https://www.cnblogs.com/ChenZhongzhou/p/5685537.html  C++中的栈内存和堆内存的区别
https://www.cnblogs.com/Lynn-Zhang/p/5449199.html     程序在内存中的分布
https://www.cnblogs.com/dotgua/p/6291925.html         [java]我的数据在哪里?——数据的内存模型
https://www.cnblogs.com/panxuejun/p/5970739.html      java中的基本数据类型存放位置
https://www.cnblogs.com/hqji/p/6582365.html           java栈、堆、方法区详解
https://blog.csdn.net/u014470361/article/details/79297601 什么是栈区、堆区静态区(全局区)、常量区、代码区

转载于:https://my.oschina.net/360yg/blog/3012303

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值