共享内存在Java中实现和应用
共享内存在Java中实现和应用
摘自http://zc4530.javaeye.com/blog/326186
1、共享内存对应应用开发的意义
对熟知UNIX系统应用开发的程序员来说,IPC(InterProcess Communication)机制是非常熟悉的,IPC基本包括共享内存、信号灯操作、消息队列、信号处理等部分,是开发应用中非常重要的必不可少的工具。其中共享内存IPC机制的关键,对于数据共享、系统快速查询、动态配置、减少资源耗费等均有独到的优点。
对应UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种,而对应Windows,实际上只有映像文件共享内存一种。所以Java应用中,也是只能创建映像文件共享内存。
在Java语言中,基本上没有提及共享内存这个概念,但是,在某一些应用中,共享内存确实非常有用,例如采用Java语言的分布式应用系统中,存在着大量的分布式共享对象,很多时候需要查询这些对象的状态,以查看系统是否运行正常或者了解这些对象的目前的一些统计数据和状态。如果采用网络通信的方式,显然会增加应用的额外负担,也增加了一些不必要的应用编程。而如果采用共享内存的方式,则可以直接通过共享内存查看对象的状态数据和统计数据,从而减少了一些不必要的麻烦。
共享内存的使用有如下几个特点:
◆可以被多个进程打开访问;
◆读写操作的进程在执行读写操作时其他进程不能进行写操作;
◆多个进程可以交替对某一共享内存执行写操作;
◆一个进程执行了内存的写操作后,不影响其他进程对该内存的访问。同时其他进程对更新后的内存具有可见性; ◆在进程执行写操作时如果异常退出,对其他进程写操作禁止应自动解除;
◆相对共享文件,数据访问的方便性和效率。
另外,共享内存的使用上有如下情况:
◆独占的写操作,相应有独占的写操作等待队列。独占的写操作本身不会发生数据的一致性问题。
◆共享的写操作,相应有共享的写操作等待队列。共享的写操作则要注意防止发生数据的一致性问题。
◆独占的读操作,相应有共享的读操作等待队列。
◆共享的读操作,相应有共享的读操作等待队列。
一般情况下,我们只是关心第一二种情况。
2、共享内存在Java中的实现
在jdk1.4中提供的类MappedByteBuffer为我们实现共享内存提供了较好的方法。该缓冲区实际上是一个磁盘文件的内存映像。二者的变化将保持同步,即内存数据发生变化会立刻反映到磁盘文件中,这样会有效的保证共享内存的实现。
将共享内存和磁盘文件建立联系的是文
相关文档:
在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_, ......
2008 年 6 月 24 日
原文地址: http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0806wangys/
本文介绍 IBM FileNet P8 4.0 Platform 提供的 Content Java API。首先对 FileNet P8 Content Engine 和 API 进行概要介绍, 并说明了一些基本概念,随后详细介绍了 FileNet Content Engine提供的基于 EJB ......
整理关于java的String
类,equals函数和比较操作符的区别
初学 Java
有段时间了,感觉似乎开始入了门,有了点儿感觉但是发现很多困惑和疑问而且均来自于最基础的知识折腾了一阵子又查了查书,终于对 String
这个特殊的对象有了点感悟大家先来看看一段奇怪的程序:
public class TestString { ......
Java开发平台的种类很多,在这篇文章中我主要以J2SE为例子。J2SE几乎是开发所有Java应用程序的必备。它主要是由一个compiler(编译器),一个运行环境(runtime environment),和一个核心的API所构成。我们要再次要强调的是,您所编写应用程序并不是直接在您的本地操作系统上执行的 ......
<!--
@page { margin: 0.79in }
P { margin-bottom: 0.08in }
-->
Java中的
io
我对流的理解是:源到目的地的轨迹,所以流的一端是数据源(输入流)或者接收器(输出流),另一端是
io中的某个类;这里说明下,
Scanne ......