
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
内存管理是程序员在学习Java编程开发技术的时候需要重点掌握的一个编程知识点,而本文我们就通过案例分析来了解一下,Java内存模型设计与应用分析。
基本概念
JMM(Java的内存模型)主要是为了规定了线程和内存之间的一些关系,定义了程序中各个共享变量的访问规则,即在虚拟机中将变量存储到内存和从内存读取变量这样的底层细节。
设计原则
根据JMM的设计,系统存在一个主内存(MainMemory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(WorkingMemory),工作内存由缓存和栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中;栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量,必须要通过主存来完成通信。
设计目的
屏蔽各种硬件和操作系统(服务厂商)的内存访问速度和方式差异,以实现让Java程序在各种平台下
都能达到一致的内存访问效果,在这里你能够知道了,类加载器以及Class字节码,解决了跨平台性的指令执行问题,而JMM则是解决了各个平台下内存访问和内存写入的标准问题。
重排序
计算机在执行程序时,为了提高性能,编译器和处理器的常常会对指令做重排,一般分以下3种:
编译器优化的重排
(编译器语义优化)
编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。
指令并行的重排
(处理器级别指令级别优化)
现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性(即后一个执行的语句无需依赖前面执行的语句的结果),处理器可以改变语句对应的机器指令的执行顺序
内存系统的重排
(缓存级别以及优化)
由于处理器使用缓存和读写缓存冲区,这使得加载(load)和存储(store)操作看上去可能是在乱序执行,因为三级缓存的存在,导致内存与缓存的数据同步存在时间差。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。