硬件内存模型
物理机并发处理的解决方案对于JVM内存模型的实现也有很大的参考作用。毕竟JVM也是做硬件层面的事情,底层架构也决定了上层的架构建模方式。
计算竞争不仅仅是多个处理器参与计算,而是会涉及到一系列的硬件问题,其中最直接的就是需要记忆相互作用。然而,计算机的存储设备与处理器的预期速度相差太大,根本无法满足处理器的处理速度。该怎么办?它涉及到在存储器之间添加一个读写速度接近处理器运行速度的缓存层以及一个缓冲区。
缓存从内存中复制使用过的数据,以方便处理器快速运行,然后将计算后的数据同步到主存中,以便处理器无需等待。
缓存虽然解决了处理器和内存之间的冲突,但也给计算机带来了另一个题:缓存一致性。特别是当多个处理器涉及同一主存区域时,各自的缓存数据可能会不一致。
当出现不一致时,谁应该占上风?
要解决这个问题,处理器和内存之间的读写必须遵循一定的协议。此类协议包括:MSI、MESI、MOSI。Synapse、Firefly和DragonProtocol等这就是上图中处理器、缓存和内存的管理方式。
除了缓存之外,为了充分利用处理器,处理器还会对代码输入指的乱序执行进行优化,只要输出一致,输入信息可以随意重新排列,因此程序中指令的计算顺序与输入代码的顺序不一致。
JVM内存模型
上面我们了解了硬件内存模型,以此为参考,我们来看看jvm的内存模型。
jvm定义的一组Java内存模型,用于实现跨所有平台一致的内存访问效果,从而屏蔽消除了各种硬件和操作系统的内存访问差异。这与C和C++不同。C和C++会直接利用操作系统的物理硬件和内存模型进行处理,因此在各个平台上会有差异。Java的情况并非如此。
Java的内存模型要求所有变量都存储在主内存中。Java课程发现每个线程都有自己的工作内存,工作内存保存了线程使用的变量的主内存副本。线程的所有操作、读取和变量赋值都必须在工作内存中执行。主存变量不能直接写入主存来完成。
你了解JVM内存结构吗?JVM内存结构主要包括两个子系统和两个组件。这两个组件是Runtimedataarea组件和Nativeinterface。)组件
JVM内存结构
最近我研究了一些Java内存泄漏的案例,并与一些以前的朋友进行了讨论。经过详细调查,我们发现以下情况:为了拆解关于JVM有很多以前不为人知的细节,我们首先来看看JVM的内部结构。
如,JVM内存结构主要由两个子系统和两个组件组成。这两个子系统是Classloader子系统和Executionengine子系统。这两个组件是Runtimedataarea组件和Nativeinterface组件。
Classloader子系统的作用
将一个类文件的内容加载到Runtimedataarea的方法区(methodarea)中。Java程序员可以通过基于提供的完全限定类名(例如javalangObject)扩展javalangClassLoader类来创建自己的类加载器。
子系统的作用
类中的执行指令。JVM规范实现(JDK)的核心是执行引擎。各种JDK,比如Sun的JDK、IBM的JDK,其质量主要取决于它们实现的执行引擎的质量。
Nativeinterface组件
与原生库交互是其他编程语言与之交互的接口。当您调用本机方法时,您进入了一个不限于虚拟机的新世界。所以用原生也很方便。heapOutOfMemory,不受JVM控制
RuntimeDataArea组件
这就是我们常说的JVM内存,它主要分为五个部分——
HeapJava虚拟实例只有一个堆区域。
MethodArea当虚拟机加载特定类型时,有关加载类的信息将存储在内存中的Methodarea中。使用类。加载器找到对应的类文件,取类文件的内容,并传输给虚拟机。
JavaStack虚拟机直接在虚拟机上只执行两个操作。每帧Javastack。压入或弹出堆栈。
ProgramCounter每个线程都有自己的PC寄存器,该寄存器在线程启动时创建,始终指向下一条要执行的指令。地址这里的地址是本地指针或偏移量,对应于方法区域内的方法的起始指令。
lishixinzhi/Article/program/Java/hx/201311/26038
程序员的Java技能宝库:深入探索Java核心技术。
了解JVM内存结构,包括堆、栈和方法区,并学习新生代和老年代垃圾回收机制。。、javac和java命令的工作原理是Java开发人员的基础知识。
掌握基本数据类型和对象概念,从基本类型到对象实例(类和实例)。然后您将了解多态性的本质以及如何封装和继承静态属性和方法的灵活使用。
深入了解List、Set、Map的底层实现,您可以使用集合工具类来:学习如何做事。提高数据运营效率。
统一了Throwable、Exception、RuntimeException的区别,并掌握InputStream、OutputStream、NIO和多线程机制。可调用/可运行、同步和可重入锁)。
网络编程通过MINA/Netty框架提供高效的TCP/UDP通信。
从JDK8开始,时间和日期API经过优化,可以准确地处理日期和时间操作。
XML/JSON解析不是J2SE核心的一部分,但现代开发框架包含它是必不可少的。(杰克逊、FastJson、Gson等)。
Maven是Java开发人员的必备工具,它包含30个实用命令,使项目管理变得轻松高效。
泛型通过使用Spring框架注解简化了编程,减少了XML配置,但是全局的请谨慎管理。语言之间的兼容性。
RMI用于远程调用接口,但在某些场景下它仍然很有价值。JNI涉及Java和本地代码之间的交互。注意正确加载本地库路径。
根据您的求职需求,自学Java的学位和学习路径非常重要。我们分享8年经验开发者的建议,提供系统的学习路线和实用的改进建议。
加入Java程序员交流圈,共同分享、共同成长。
上一篇:jvm的内存模型是什么
下一篇:jvm内存模型简单理解