深圳Java编程教学:什么是java的内存结构和模型呢?
作者:广州电脑培训甘发布时间:2020-11-05分类:深圳电脑学校浏览:581
在学习java的过程中大家会发现很多的时候有很多的知识点都是比较难学习的,但是也有一些名词和概念看起来也是非常的相似额,所以很多的人在学习的时候就会经常分不清。今天科技就来给大家讲解下java的内存结构和模型,让大家在学习的时候可以分的清楚这些复杂的知识点。
JVM内存结构
我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。各个区域的功能不是本文重点,就不在这里详细介绍了。这里简单提几个需要特别注意的点:
1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范。
2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能。但是并没有规定这个区域到底应该处于何处。所以,对于不同的虚拟机实现来说,是有一定的自由度的。
3、不同版本的方法区所处位置不同,上图中划分的是逻辑区域,并不是绝对意义上的物理区域。因为某些版本的JDK中方法区其实是在堆中实现的。
4、运行时常量池用于存放编译期生成的各种字面量和符号应用。但是,Java语言并不要求常量只有在编译期才能产生。比如在运行期,String.intern也会把新的常量放入池中。
5、除了以上介绍的JVM运行时内存外,还有一块内存区域可供使用,那就是直接内存。Java虚拟机规范并没有定义这块内存区域,所以他并不由JVM管理,是利用本地方法库直接在堆外申请的内存区域。
6、堆和栈的数据划分也不是绝对的,如HotSpot的JIT会针对对象分配做相应的优化。
Java内存模型
Java内存模型看上去和Java内存结构差不多,很多人会误以为两者是一回事儿,这也就导致面试过程中经常答非所为。在前面的关于JVM的内存结构的图中,我们可以看到,其中Java堆和方法区的区域是多个线程共享的数据区域。也就是说,多个线程可能可以操作保存在堆或者方法区中的同一个数据。这也就是我们常说的“Java的线程间通过共享内存进行通信”。
Java内存模型是根据英文Java Memory Model翻译过来的。其实JMM并不像JVM内存结构一样是真实存在的。他只是一个抽象的概念。JSR-133: Java Memory Model and Thread Specification 中描述了,JMM是和多线程相关的,他描述了一组规则或规范,这个规范定义了一个线程对共享变量的写入时对另一个线程是可见的。
那么,简单总结下,Java的多线程之间是通过共享内存进行通信的,而由于采用共享内存进行通信,在通信过程中会存在一系列如可见性、原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。
在JMM中,我们把多个线程间通信的共享内存称之为主内存,而在并发编程中多个线程都维护了一个自己的本地内存,其中保存的数据是主内存中的数据拷贝。而JMM主要是控制本地内存和主内存之间的数据交互的。
- 深圳电脑学校排行
- 最近发表
-
- 梅州信息:凝聚共识裁审同行梅州市召开劳动人事争议裁审衔接工作研讨会|||计算机网络培训学校
- 东莞信息:虎门镇民营企业招聘月活动|||广州市北大青鸟计算机职业培训学校
- 东莞信息:(塘厦)塘厦镇举办“筑劳知识”之“阳光经营第一课”劳务派遣政策法规宣讲会|||计算机职业技能培训班
- 东莞信息:(塘厦)塘厦镇举办2024年全市首场名城名企OpenDay活动启动仪式|||计算机软件培训学校
- 东莞信息:(南城)南城开展“民营企业招聘月”直播带岗活动|||中专学计算机平面设计女生可以学计算机网络技术好吗
- 湛江信息:专家、大咖云集献策!国家高层次人才服务行活动走进湛江|||计算机培训学校招生
- 东莞信息:(万江)万江人社分局组织企业参加东莞云聘周周招直播带岗活动|||计算机培训学校招生
- 东莞信息:(莞城)深入园区送政策精准服务助发展|||计算机网络培训学校
- 汕头信息:市人社局加强公共服务下沉基层赋能“百千万工程”|||计算机专业维修学校
- 东莞信息:(东坑)东坑再添一家“广东省博士工作站”|||计算机专业维修学校
- 标签列表
-