Java 的内存模型 JMM(Java Memory Model)
由于程序的最终运行方式是将程序中各变量(实例域、静态域和数组元素)存入内存,然后通过处理器的加工,再从内存中取出,所以对于单处理器,程序怎样将变量存入内存,以及怎样取出
都不会影响程序的实际运行,而对于多处理程序,变量的存入和取出却变的至关重要,这也是在
讨论Java的线程机制时我们必须面对的问题。所以在这里我先把JMM拿出来总结,因为以后在总结
线程的时候我会多次拿JMM说事。
先定义一下内存模型(
来自Brian Goetz 的修复 Java 内存模型,第 1 部分):内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。对象最终存储在内存中,但编译器、运行库、处理器或缓存可以有特权定时地在变量的指定内存位置存入或取出变量值。例如,编译器为了优化一个循环索引变量,可能会选择把它存储到一个寄存器中,或者缓存会延迟到一个更适合的时间,才把一个新的变量值存入主存。所有的这些优化是为了帮助实现更高的性能,通常这对于用户来说是透明的,但是对多处理系统来说,这些复杂的事情可能有时会完全显现出来。
那么JMM是什么呢?再来一段(
来自Brian Goetz 的修复 Java 内存模型,第 1 部分):The JMM allows the compiler and cache to take significant liberties with the order in which data is moved between a processor-specific cache (or register) and main memory, unless the programmer has explicitly asked for certain visibility guarantees using synchronized or volatile. This means that in the absence of synchronization, memory operations can appear to happen in different orders from the perspective of different threads.
这一段在rian Goetz 的修复 Java 内存模型,第 1 部分翻译的相当晦涩,我偷了一下懒,也不做翻译了,大概意思是JMM会将一个变量保存两份,而这两份对于java的编译器都是合法
的,
但是,注意了这两份变量在同一时刻,对处理器可能是不一致的,具体的讨论可以参考这个链接:
http://www.ibm.com/developerworks/cn/java/j-jtp02244/
分享到:
相关推荐
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
Java线程机制是Java编程语言中的一个重要特性,它使得开发者能够在单个应用程序中同时执行多个任务,从而提高程序的效率和响应性。Java通过内置的线程支持使得多线程编程变得相对简单,与C++等其他语言相比,Java...
Java的多线程机制是Java语言的一大特性,它允许程序同时执行多个任务,提升程序响应速度,优化资源利用率。在Java中,线程是程序执行的最小单位,一个进程可以包含多个线程,每个线程都有自己独立的生命周期,包括...
Java 软件设计基础:Java线程机制 Java 软件设计基础中,Java 线程机制是指在 Java 中实现多线程编程的机制。多线程编程是指在单个程序中可以同时运行多个不同的线程,执行不同的任务,这是实现并发机制的一种有效...
### Java多线程机制详解与示例 #### 一、Java多线程机制概述 Java中的多线程机制是程序设计中的一个重要概念,它允许在同一个应用程序中并发执行多个线程,有效地提高了程序的执行效率和响应速度。通过Java语言...
Java多线程机制是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。本文...
根据提供的信息,我们可以推断出这份文档主要关注的是Java线程的相关内容。下面将围绕“Java线程”这一主题展开详细的介绍与解释。 ### Java线程基础 在Java语言中,线程是程序执行流的基本单元。一个标准的Java...
Java多线程机制研究.kdh Java多线程机制研究.kdh Java多线程机制研究.kdh
本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要。线程是程序中一个单一的顺序控制流,它在程序的上下文中运行,但具有独立的执行路径。多线程则是指在...
"Java多线程机制分析与应用" Java多线程机制是Java语言中一个重要的特征,可以通过对Java中的多线程创建机制和使用方法进行探讨,分析多线程中的同步必要性和实现方式,并给出多线程的实际应用示例。 Java多线程...
Java多线程机制是编程中一个重要的概念,它允许程序同时执行多个任务,提升程序的效率和响应性。在Java中,线程是程序执行的基本单元,比进程更细粒度,一个进程可以包含多个线程。每个线程有自己的生命周期,包括...
《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...
当用户在“命令”后的文本框中输入“start clock”后,“现在的时间是”后的文本框开始显示系统时钟;当用户输入“stop clock”后,时钟终止显示。 (2)当用户在“命令”后的文本框中输入“fast”后,能够加速滚动...
Java线程是Java编程语言中的核心概念,尤其在多任务处理和并发编程中扮演着重要角色。线程允许一个程序内部同时执行多个独立的控制流,使得程序能够更高效地利用处理器资源。本文将深入解析Java线程的相关知识点,...
在分析JAVA线程dump时,需要了解JAVA线程的编程原理和同步机制,包括线程的状态、调用堆栈和Monitor的状态。不同JAVA虚拟机的线程dump的创建方法和文件格式是不一样的,不同的JVM版本,dump信息也有差别。 在实际...
这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等方面。 一、单项选择题 在单项选择题中,我们可以看到各种关于 JAVA 多线程编程的基本概念和...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...