首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM源码分析之perfData文件的创建

默认这个参数是关闭的,也就是默认支持共享的方式 由于perfdata文件时通过mmap共享的,因此考虑看下perfdata文件的创建过程,看看跟mmap的MAP_SHARED和MAP_PRIVATE两个标志位是如何联系在一起的...perfdata文件底层是使用mmap接口实现的,而mmap接口的参数中有关于内存可见性的两个参数:MAP_SHARED和MAP_PRIVATE,如果JVM参数设置允许perfdata文件共享,则使用MAP_SHARED...size) ——> mmap_create_shared(size)——>mapAddress = (char)::mmap((char)0, size, PROT_READ|PROT_WRITE, MAP_SHARED..., fd, 0);,在这里看到了MAP_SHARED标记。...release_memory(mapAddress, size); return NULL; } return mapAddress; } 至此可以确认两个结论 创建shared内存,使用mmap,并传入MAP_SHARED

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    6.S0816.828: 10 Lab mmap

    如果unmapped page被修改过且MAP_SHARED,filewrite写回文件; 修改exit来unmap进程内存映射区域,修改fork来确保子进程会复制mapped区域,需要对文件增加引用;...3 代码实现 3.1 接口定义 MAP_SHARED是进程共享,会将修改的数据写回文件,MAP_PRIVATE不会刷回文件,只在内存中临时保存。...void); [SYS_mmap] sys_mmap, [SYS_munmap] sys_munmap, 3.2 sys_mmap mmap实现放在sysfile.c中,首先校验参数,如果在MAP_SHARED...先从pvma数组找到释放的vma,并决定需要释放左边、右边还是全部,释放左边需要移动vma.addr和vma.offset,释放右边减少vma.len即可;然后逐页判断PTE是否有效,有且MAP_SHARED...if(vm_exists(p->pagetable, va)){ if(a->flags & MAP_SHARED){ munmap_writeback(va, PGSIZE

    41140

    POSIX共享内存

    PROT_READ:数据可读; PROT_WRITE:数据可写; PROT_EXEC:数据可执行; PROT_NONE:数据不可访问; flags:设置内存映射区的类型标志,POSIX标志定义了以下三个标志: MAP_SHARED...上面三个标志是在POSIX.1-2001标准中定义的,其中MAP_SHARED和MAP_PRIVATE必须选择一个。...对于一个MAP_SHARED的内存映射区,内核的虚拟内存算法会保持内存映射文件和内存映射区的同步,也就是说,对于内存映射文件所对应内存映射区的修改,内核会在稍后的某个时刻更新该内存映射文件。...return -1; } char *memPtr; memPtr = (char *)mmap(NULL, 5000, PROT_READ | PROT_WRITE, MAP_SHARED...在Linux 2.4以后,mmap提供匿名内存映射机制,即将mmap的flags参数指定为:MAP_SHARED | MAP_ANON。这样就彻底避免了内存映射文件的创建和打开,简化了对文件的操作。

    2.8K10

    【进程间通信】mmap共享存储映射

    PROT_WRITE:可写(PROT_READ | PROT_WRITE 读写) PROT_EXEC:可执行 PROT_NONE:不可用 flags:标志位参数,常用于设定更新物理区域、设置共享、创建匿名映射区 MAP_SHARED...当MAP_SHARED时,要求:映射区的权限应小于等于文件打开的权限(出于对映射区的保护,因为映射区的操作会影响文件)。而MAP_PRIVATE则无所谓,因为mmap中的权限是对内存的限制。...父子等有血缘关系的进程之间也可以通过mmap()函数建立的映射区来完成通信,但相应的要在创建映射区的时候指定对应的标志位参数flags:MAP_PRIVATE(私有映射)表示父子进程各自独占映射区;MAP_SHARED...所以,要想通信,必须用MAP_SHARED。 5. 匿名映射 通过上面的分析我们可以体会到,使用映射区来完成文件读写操作十分方便,父子进程间通信也较容易且速度更快。...只要选择了MAP_SHARED参数,两个进程对自己的内存映射区的操作都会反映到同一个文件中,所以这个文件充当了桥梁的作用,两个进程也就实现了数据交换。

    14510

    【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

    NULL : 映射区的开始地址 sizeof(student) * 1 : 文件映射区的长度 PROT_READ | PROT_WRITE : 内存保护的标志位 , 该内存页的内容可以 读取 写入 MAP_SHARED.../ sizeof(student) * 1 : 文件映射区的长度 // PROT_READ | PROT_WRITE : 内存保护的标志位 , 该内存页的内容可以 读取 写入 // MAP_SHARED..., 从文件的哪个字节位置开始映射 p_student = (student*)mmap(NULL, sizeof(student) * 10, PROT_READ | PROT_WRITE, MAP_SHARED.../ sizeof(student) * 1 : 文件映射区的长度 // PROT_READ | PROT_WRITE : 内存保护的标志位 , 该内存页的内容可以 读取 写入 // MAP_SHARED..., 从文件的哪个字节位置开始映射 p_student = (student*)mmap(NULL, sizeof(student) * 10, PROT_READ | PROT_WRITE, MAP_SHARED

    1.4K10

    MIT 6.S081 Lab Ten -- mmap

    flags要么是MAP_SHARED(映射内存的修改应写回文件),要么是MAP_PRIVATE(映射内存的修改不应写回文件)。您不必在flags中实现任何其他位。fd是要映射的文件的打开文件描述符。...允许进程映射同一个MAP_SHARED文件而不共享物理页面。 munmap(addr, length)应删除指定地址范围内的mmap映射。...如果进程修改了内存并将其映射为MAP_SHARED,则应首先将修改写入文件。...如果未映射的页面已被修改,并且文件已映射到MAP_SHARED,请将页面写回该文件。查看filewrite以获得灵感。 理想情况下,您的实现将只写回程序实际修改的MAP_SHARED页面。...页面写回文件系统 if(p->vma[i].flags == MAP_SHARED && (p->vma[i].prot & PROT_WRITE) !

    25730

    聊聊跨进程共享内存的内部工作原理

    .); // 为内存文件申请 MAP_SHARED 类型的内存 shm = mmap(NULL, shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd,...2.2 mmap申请内存 mmap 也是一个系统调用,注意我们在开篇处调用它的时候传入的第三个 flag 参数是 MAP_SHARED。这表示的是要通过 mmap 申请一块跨进程可共享的内存出来。...,则对要申请的虚拟内存设置一个 VM_SHARED switch (flags & MAP_TYPE) { case MAP_SHARED: case MAP_SHARED_VALIDATE:...addr = mmap_region(file, addr, len, vm_flags, pgoff, uf); ...... } 如果 flag 包含了 MAP_SHARED,则对要申请的虚拟内存设置一个...第二步,mmap 系统调用在调用它的时候传入的第三个 flag 参数是 MAP_SHARED,该参数是申请一块跨进程可共享访问的物理内存。

    58521

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券