`
dsxwjhf
  • 浏览: 70871 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Java 平台无关性和 Java 内存模型

    博客分类:
  • JVM
阅读更多
我们知道, Java 虚拟机是平台无关性的基石。

在我看来,它有两层意思,仅供参考,做不得数。

首先, Java 语言规范定义了一套统一的 API (可以把它看成一个 Facade),同时各个平台有自己专有的虚拟机。 Java API 在不同的虚拟机上,最终调用了自身操作系统下的功能函数(如 dll),所以从外部来看, Java API 在不同平台下有一致的表现。

其次, Java 虚拟机规范定义了一套 Java 内存模型,它试图屏蔽掉不同硬件和操作系统下内存访问的差别。举个例子,在现代操作系统中,多内核情况下,每个 CPU 和主内存之间一般都会有一个高速缓存,用来提高数据存取的速度。但是如何保证各缓存数据的一致性,是一个比较复杂的问题,不同的硬件和操作系统选取的解决方案也各不相同。各平台的虚拟机,有和当前平台的内存模型一致的 Java 内存模型,所以从外部(Java 应用程序的角度)来看,内存访问是一个黑匣子,依靠不同的 JVM ,在不同平台下有一致的表现。

那么 Java 内存模型到底是什么呢?首先它是人为定义出来的一个协议,主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这样的底层细节。我们知道,为了填平 CPU 运算速度和内存读写速度的鸿沟,在虚拟机中每个线程都有自己的工作内存,同时还有一个大家共享的主内存。那数据如何从主内存读取到工作内存?如何从工作内存写入到主内存?如何保证各个工作内存之间数据的一致性?这些都是 Java 内存模型要解决的问题。 Java 内存模型定义了8种原子操作(lock, unlock, read, load, use, assign, store, write),以及针对这些操作的8条规则,最终形成一个并发环境下内存访问的方法论,这就是 Java 内存模型。
分享到:
评论

相关推荐

    Java内存模型JMM浅析

    Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、...

    Java 实现拼图游戏小案例

    3. 平台无关性:Java 程序在编译后生成的是字节码(bytecode),而不是特定操作系统的机器码。这使得 Java 程序可以在不同的操作系统上运行,实现了“一次编写,到处运行”的理念。 4. 自动内存管理:Java 使用垃圾...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    文本编辑器的Java 实现小例子

    3. 平台无关性:Java 程序在编译后生成的是字节码(bytecode),而不是特定操作系统的机器码。这使得 Java 程序可以在不同的操作系统上运行,实现了“一次编写,到处运行”的理念。 4. 自动内存管理:Java 使用垃圾...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Java理论与实践:JDK 5.0中更灵活、更具可伸缩性的锁定机制

    本文介绍了多线程和并发性并不是什么新内容,但是Java语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个Thread类,可以用它来构建、启动和操纵...

    Java课件pptJava的学习资料

    Java采用的指针模型可以消除重写内存和数据崩溃的可能) 6) 多线程(多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因之一) 7)安全(用Java可以构建防病毒和防篡改的系统) 9) 动态(Java可随意增加新的...

    基于JAVA的学生通讯录管理系统设计和实现[文献综述].doc

    它具有 简洁、安全、面向对象、动态、体系结构中立、可移植、分布式、平台无关性等多个优 点,被广泛地运用到计算机、便携式计算机、电视、电话、手机和其他大量设备上。Ja va的前景被广泛地看好,并有许多相关机构...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics