如题
谢谢

解决方案 »

  1.   

    // 获得一个只读的随机存取文件对象
    RandomAccessFile RAFile = new RandomAccessFile(filename,"r");// 获得相应的文件通道
    FileChannel fc = RAFile.getChannel();// 取得文件的实际大小,以便映像到共享内存
    int size = (int)fc.size();// 获得共享内存缓冲区,该共享内存只读
    MappedByteBuffer mapBuf = fc.map(FileChannel.MAP_RO,0,size);// 获得一个可读写的随机存取文件对象
    RAFile = new RandomAccessFile(filename,"rw");// 获得相应的文件通道
    fc = RAFile.getChannel();// 取得文件的实际大小,以便映像到共享内存
    size = (int)fc.size();// 获得共享内存缓冲区,该共享内存可读写
    mapBuf = fc.map(FileChannel.MAP_RW,0,size);// 获取头部消息:存取权限
    mode = mapBuf.getInt();如果多个应用映像同一文件名的共享内存,则意味着这多个应用共享了同一内存数据。这些应用对于文件可以具有同等存取权限,一个应用对数据的刷新会更新到多个应用中。为了防止多个应用同时对共享内存进行写操作,可以在该共享内存的头部信息加入写操作标志。该共享内存的头部基本信息至少有:int Length; // 共享内存的长度。
    int mode; // 该共享内存目前的存取模式。
    共享内存的头部信息是类的私有信息,在多个应用可以对同一共享内存执行写操作时,开始执行写操作和结束写操作时,需调用如下方法:public boolean StartWrite()
    {
    if(mode == 0) { // 标志为0,则表示可写
    mode = 1; // 置标志为1,意味着别的应用不可写该共享内存
    mapBuf.flip();
    mapBuf.putInt(mode); // 写如共享内存的头部信息
    return true;
    }
    else {
    return false; // 指明已经有应用在写该共享内存,本应用不可写该共享内存
    }
    }public boolean StopWrite()
    {
    mode = 0; // 释放写权限
    mapBuf.flip();
    mapBuf.putInt(mode); // 写入共享内存头部信息
    return true;
    }
      

  2.   

    内存共享??
    下面有个参考,不知道是不是你要的!
    http://www.ibm.com/developerworks/cn/java/l-memshare/
    http://www.ibm.com/developerworks/cn/java/j-shared/
      

  3.   

    Java语言的分布式应用系统中,存在着大量的分布式共享对象,很多时候需要查询这些对象的状态,以查看系统是否运行正常或者了解这些对象的目前的一些统计数据和状态。如果采用网络通信的方式,显然会增加应用的额外负担,也增加了一些不必要的应用编程。而如果采用共享内存的方式,则可以直接通过共享内存查看对象的状态数据和统计数据,从而减少了一些不必要的麻烦。