当前位置:首页 > Java知识 > 正文内容

java的内存模型和内存结构(javajvm内存模型)

abcsky887个月前 (10-29)Java知识100

本篇文章给大家谈谈

感谢大家的认可,我在github上维护的《Java工程师成神之路》目前正在更新中,欢迎关注https://github.com/hollischuang/toBeTopJavaer​github.com/hollischuang/toBeTopJavaer。

java的内存模型和内存结构(javajvm内存模型)

JVM内存结构 VS Java内存模型 VS Java对象模型Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚比如本文我们要讨论的。

JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混可以这样说,很外贸网站制作 seo多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及其间的区别。

甚至我见过有些面试官自己也搞的不是太清楚不信的话,你去网上搜索Java内存模型,还会有很多文章的内容其实介绍的是JVM内存结构首先,这三个概念是完全不同的三个概念本文主要对这三个概念加以区分以及简单介绍。

其中每一个知识点都可以单独写一篇文章,本文并不会深入介绍,感兴趣的朋友可以加入我的知识星球和球友们共同学习JVM内存结构我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。

其中有些区域随着虚拟机进程外贸网站制作 seo的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁在《Java虚拟机规范(Java SE 8)》中描述了JVM运行时内存区域结构如下:

各个区域的功能不是本文重点,就不在这里详细介绍了这里简单提几个需要特别注意的点:1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能。

但是并没有规定这个区域到底应该处于何处所以,对于不同的虚拟机实现来说,是由一定的自由度的3、不同版本的方法区所处位置不同,上图中划分的是逻辑区域,并不是绝对意义上的物理区域因为某些版本的JDK中方法区其实是在堆中实现的。

4、外贸网站制作 seo运行时常量池用于存放编译期生成的各种字面量和符号应用但是,Java语言并不要求常量只有在编译期才能产生比如在运行期,String.intern也会把新的常量放入池中5、除了以上介绍的JVM运行时内存外,还有一块内存区域可供使用,那就是直接内存。

Java虚拟机规范并没有定义这块内存区域,所以他并不由JVM管理,是利用本地方法库直接在堆外申请的内存区域6、堆和栈的数据划分也不是绝对的,如HotSpot的JIT会针对对象分配做相应的优化如上,做个总结,JVM内存结构,由Java虚拟机规范定义。

描述的是Java程序执行过程中,由JVM管理的不同数据区域各个区域有其特定的功能Java内存模型Java内存外贸网站制作 seo模型看上去和Java内存结构(JVM内存结构)差不多,很多人会误以为两者是一回事儿,这也就导致面试过程中经常答非所为。

在前面的关于JVM的内存结构的图中,我们可以看到,其中Java堆和方法区的区域是多个线程共享的数据区域也就是说,多个线程可能可以操作保存在堆或者方法区中的同一个数据这也就是我们常说的“Java的线程间通过共享内存进行通信”。

Java内存模型是根据英文Java Memory Model(JMM)翻译过来的其实JMM并不像JVM内存结构一样是真实存在的他只是一个抽象的概念JSR-133: Java Memory Model and Thread Specification。

中描述了外贸网站制作 seo,JMM是和多线程相关的,他描述了一组规则或规范,这个规范定义了一个线程对共享变量的写入时对另一个线程是可见的那么,简单总结下,Java的多线程之间是通过共享内存进行通信的,而由于采用共享内存进行通信,在通信过程中会存在一系列如可见性、。

原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。

在Java中,JMM是一个非常重要的概念,正是由于有了JMM,Java的并发编程才能避免很多问题这里就不对Java内存模型做更加详细的介绍了,想了解更多的朋友可以参外贸网站制作 seo考《Java并发编程的艺术》Java对象模型。

Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的而这个关于Java对象自身的存储模型称之为Java对象模型HotSpot虚拟机中,设计了一个OOP-Klass ModelOOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。

每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个。

instanceOopDesc外贸网站制作 seo对象,这个对象中包含了对象头以及实例数据。

这就是一个简单的Java对象的OOP-Klass模型,即Java对象模型总结我们再来区分下JVM内存结构、 Java内存模型 以及 Java对象模型 三个概念JVM内存结构,和Java虚拟机的运行时区域有关。

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://www.4blc.com/post/659.html

分享给朋友:

“java的内存模型和内存结构(javajvm内存模型)” 的相关文章

java面试基础题目(java面试题基础题)

本文分享给大家的是: 出自:https://github.com/gzc426/Java-Interview1.1. Java 8种基本类型有哪些?Byte short int long float double boolean char 1.2 什么是装箱和拆箱?装箱就是...

电商直播间(电商直播新玩法)

今天给各位分享 转自:河南日报 河南日报客户端记者孟向东 李栀子 通讯员黎伟 聂贵鲜“怎样抓住直播电商带货的新风口?”“抖音店铺运营的核心是什么?”………2月21日上午,淅川县商务局联合盛湾镇人民政府在镇政府会议室开办的第一期抖音直播带货技术培训班火爆开讲,一个又一个生动具...

java高级面试题大汇总(java中高级面试)

今天给各位分享 Java面试题及答案(2022版),适用于应届生、用工作经验的程序员,每道都是认真筛选出的高频面试题,助力大家能找到满意的工作!下载链接:全部面试题及答案PDF1.什么是B/S架构?什么是C/S架构B/S(Browser/Server),浏览器/服务器程序;...

java入门到(java入门很简单)

本篇文章给大家谈谈 1) JAVA起源Java是Sun公司于1995年推出的高级编辑语言Java之父——詹姆斯·高斯林1996年Sun公司推出了Java开发工具包,也就是JDK1.0,提供了强大的类库支持1998年推出了JDK1.2,它是Java里程碑式的版本。 为了加以区...

5个降号降哪个调(5个脚趾名称)

今天给各位分享 优化 JVM 吞吐量和避免运行时瓶颈的最佳方法是将 Java 性能分析作为团队持续开发和部署 (CI/CD) 策略的关键部分以下是五个 Java 性能分析技巧和最佳实践,可帮助你充分利用本地硬件和云托管运行时环境。 1. 永远不要关闭Java性能分析Java...

谁被誉为java之父(java之父是谁?)

本篇文章给大家谈谈 前不久,TechRepublic 发表了一篇文章讨论关于开发人员喜爱与讨厌的语言结果很有意思:Java 在最受欢迎的语言排行榜名列第三,同时在最讨厌的语言中排在第二名显然,Java 作为一门开发语言,人们对它的看法形成了两极分化。 对此 C++ 的创始人...