当前位置:首页 > 内存 > 正文

jvm的内存模型(jvm对象内存模型)

  • 内存
  • 2024-04-30 17:05:05
  • 6978

一、java课程分享java多线程的内存模型


硬件内存模型

解决方案物理设备的并发处理对JVM内存模型的实现也有很大的参考影响,毕竟JVM也是做硬件层的事情,底层的架构也决定了上层的架构建模方式。


计算机中的并发不仅仅局限于多个处理器参与计算,而是会涉及到一系列的硬件问题,其中最直接的就是需要用于记忆交互。然而,计算机的存储设备与处理器的预算速度相差很大,根本无法满足处理器的处理速度。需要做的就是在内存之间添加一层读写速度接近处理器运行速度的缓存作为处理器和缓冲区。


缓存从内存中复制使用过的数据,以方便处理器快速运行,然后将计算出的数据与主存同步,这样处理器就不会需要等待。


缓存虽然解决了处理器和内存之间的冲突,但也给计算机带来了另一个问题:缓存一致性。特别是当多个处理器具有相同的主存区域时,它们的缓存数据可能会不一致。


那么当出现矛盾时,谁应该获胜呢?


为了解决这个问题,处理器和内存之间的读写需要遵循一定的协议,包括:MSI、MESI、MOSI等。Synapse、Firefly、DragonProtocol等这就是上图中处理器、缓存和内存的处理方式。


除了缓存之外,为了充分利用处理器,处理器还会对代码输入指令的乱序执行进行优化,只要输出一致,输入息可以乱序重新组织,所以程序中语句计算的顺序与输入代码的顺序并不对应。



JVM内存模型

我们了解您的意思上面说了设备内存模型,以此为参考,我们来看看jvm内存模型。



jvm为了实现跨平台一致的内存访问效果而定义的一组Java内存模型,从而屏蔽消除了不同设备和操作系统之间内存访问的差异。这与C和C++不同。C和C++会直接使用操作系统的物理硬件和内存模型来进行处理,所以每个平台都会有差异。Java的情况并非如此。


Java的内存模型规定所有变量都存储在主存中。Java课程发现每个线程都有自己的工作内存,工作内存保存为线程使用的变量的主内存副本。所有操作、读取和变量赋值都必须由线程在工作内存中执行。对主存储器的更改不能直接写入。线程之间传递变量值需要主内存来完成。



二、北京IT培训分享Java知识点整理归纳

经过这么多年的发展,结合一些面试开发者的经验,我认为J2SE最重要的是掌握以下内容。


每个版本1个)

对于刚接触JVM的人来说,JVM相关知识不一定需要深入了解,简单了解所涉及的概念就足够了。然而,对于一个拥有三年以上经验的高级开发人员来说,不了解JVM几乎是无法接受的。

JVM是运行的基础。很难相信对JVM一无所知的人能够彻底理解这门语言。当我面试三年以上经验的开发人员时,JVM几乎是必问问题。当然,JVM并不是唯一决定技术能力的面试题,但它可以证明开发能力的高低。


在JVM这个大范畴中,我认为需要掌握的知识是:

JVM内存模型及结构

GC原理、性能优化

优化:ThreadDump、内存结构分析

类二进制字节码结构、类加载系统、类加载过程、实例创建过程

方法执行流程

各大版本更新提供的新特性(需要简单了解)



2.运行(基础)

谁不知道如何运行程序?但通常我们只是通过IDE运行程序。底层IDE是如何执行程序的?很多人不理解。


这是开发者需要掌握的最基本的知识点。对于初学者来说,第一步是教你如何在命令行上运行程序。但很多人在学习和使用完IDE后就忘记了这一点。为什么强调需要了解这一点?了解了最纯粹的启动方式后,就可以分析此时启动了多少个目录,执行命名是什么,有哪些参数,以及启动过程中是否有文件丢失的问题。这将帮助您解决实际开发过程中可能与环境有关的奇怪问题。

这里需要掌握的知识是:

C编译出来的文件就是类文件

命令的使用,类与packages如何从命令行启动

程序中涉及到的各种路径(clasth、.、运行主目录等)


3。数据类型

这个就不多说了,掌握基本类型和对象类型就行了。北京IT培训建议大家多了解一下JDK是如何自动转换的,包括装箱和拆箱等,同时也要注意不要判断装箱后的类型相等

重点知识点:

基本类型:int、long、float、double、boolean、。。。

对应的对象类型:整数等类型到基类型的转换、装箱和拆箱

对象类型:equal、hashcode

字符串类型属性

>