ChronicleMap –具有堆外内存的Java体系结构

我的上一篇文章是在几周前写的,在收到一些有效的反馈后,我想澄清几点,作为本文的序言。

“ 使用零垃圾创建数百万个对象 ”的主要收获应该是,使用Chronicle,在编写Java程序时,您不会“局限于”使用jvm分配的堆内存。 也许这篇文章更恰当地标题为“使用零堆创建数百万个对象”。 我想指出的另一点是,当您没有堆内存时,不会引起GC活动。

我使用术语“垃圾”来描述分配在堆上的对象的事实使人感到困惑。 尽管分配的对象引起GC活动,但实际上它们不是垃圾。

我设计了一个示例来说明一个,一个是ChronicleMap不使用堆内存,而ConcurrentHashMap则使用第二个;当您使用堆内存时,您不能忽略GC。 至少您需要仔细调整系统,以确保您不会因为长时间的GC暂停而遭受痛苦。 这并不意味着从堆外分配没有任何问题(请参阅本文的结尾),也并不意味着您无法通过堆上解决方案进行优化以消除GC。 摆脱困境绝不是解决所有Java性能问题的灵丹妙药,但是对于非常具体的解决方案,它可以提供有趣的机会,我将在本文中讨论其中的一些机会。

有时可能需要在JVM之间共享数据。

现在让我们简化一下,假设您有两个JVM在同一台计算机上运行,​​其中一个或两个都希望看到彼此的更新。 每个Java程序都有一个ConcurrentHashMap ,它将对其进行更新,这些更新将被存储并在以后可供使用。 但是,程序如何将另一个Java程序应用的更新获取到其映射?

从根本上讲,不能在JVM之间直接共享HashMapConcurrentHashMap类的JDK堆集合。 这是因为堆内存由分配它的JVM包含。 因此,当JVM退出时,内存被释放并且数据不再可用,因此没有在JVM的生命周期之外持久保留内存的隐式方法。 因此,您需要找到其他机制来在JVM之间共享数据。 通常,您可以将数据库用作外部共享存储和消息传递服务,以将数据更新发送给其他进程,以通知他们某些数据已被更新。

这导致以下体系结构:

20150330_095411

这种体系结构的问题是,使用会丢失HashMap的内存速度,特别是如果写入数据库的速度不是那么快,并且您希望在通过消息传递服务发送消息之前坚持写操作。 同样,许多解决方案都将涉及TCP调用,这可能再次成为延迟的源头。

当然,与使用诸如将日志记录到磁盘的机制(例如,使用ChronicleQueue之类的产品)写入成熟的数据库相比,存在持久化数据的方法要快得多。 但是,如果您确实使用日志,则仍然必须建立所有逻辑以在重新启动时重新创建Map数据结构,更不用说必须在另一个JVM上保持Map类型结构的最新状态。

(您可能根本想保留数据的原因是,这样您应该能够在重新启动时进行恢复,而不必从源中重播所有数据)。 除了此体系结构引入的延迟之外,还必须处理数据库和消息传递服务的额外代码和配置。

即使接受这种功能都可以封装在框架中,如果您的内存Map实际上在JVM外部可见,那不是很好。 Map应该能够隐式持久化数据,以便其数据独立于JVM的生存时间可用。 它应该允许使用与使用堆上映射相同的“内存”速度进行访问。

这就是ChronicleMap用处ChronicleMapjava.util.ConcurrentMap的实现,但重要的是,它使用了堆外内存 ,该内存在JVM外部对于计算机上运行的任何其他进程都是可见的。 (有关堆上内存与堆外内存的讨论,请参见此处 )。

每个JVM将创建一个指向相同的内存映射文件的ChronicleMap 。 当一个进程写入其ChronicleMap ,另一个进程可以立即(约40纳秒)在其ChronicleMap查看更新。 由于数据存储在JVM外部的内存中,因此JVM退出不会导致任何数据丢失。 数据将保存在内存中(假设不需要分页),并且在JVM重新启动时,它可以非常快速地将其重新映射。 丢失数据的唯一方法是,如果操作系统崩溃而脏页尚未保存到磁盘上,则该操作系统崩溃。 解决方案是Chronicle 支持的使用复制,但超出了本文的范围。

其架构就是这样的:

20150330_102223

有关ChronicleMap入门的代码示例,请参阅我的上一篇文章或此处的官方ChronicleMap教程。

在进入ChronicleMap之前,需要考虑很多注意事项和权衡取舍。

  • ChronicleMap条目必须可序列化。 对于对性能非常敏感的系统,您需要实现Chronicle提供的称为BytesMarshallable的自定义序列化。 尽管这很容易实现,但堆映射并不是必需的。 (话虽如此,将数据存储到数据库中当然也需要某种序列化方法。)
  • 即使使用BytesMarshallable序列化,任何序列化的开销对于某些系统而言也可能很重要。 在这种情况下,可以采用Chronicle支持的零拷贝技术(有关更多详细信息,请参阅我的上一篇博客文章 ),以最大程度地降低序列化的成本。 但是,与使用“普通” Java相比,实现起来有些棘手。 另一方面,在对延迟敏感的程序中,它将具有不创建任何对象的巨大好处,这些对象随后可能需要由GC清理。
  • ChronicleMap不会调整大小,因此必须预先调整大小。 如果您不知道预期有多少个项目,可能会出现问题。 但是,应该指出的是,至少在Linux上,过度设置不是一个大问题,因为Linux被动分配内存。
  • 编年史依靠操作系统异步刷新到磁盘。 如果要绝对确定数据已实际写入磁盘(而不是仅保存在内存中),则需要复制到另一台计算机。 实际上,任何关键任务系统都应复制到另一台机器上,因此在采用《纪事报》时这可能不是大问题。
  • ChronicleMap将受到操作系统内存分页问题的影响。 如果内存已调出并且必须换回,则延迟会引入系统。 因此,即使您能够创建大小远远超过主内存的ChronicleMaps,您也必须意识到根据数据访问模式的不同,可能会发生分页。

翻译自: https://www.javacodegeeks.com/2015/04/chroniclemap-java-architecture-with-off-heap-memory.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML滚动条S默认最小值,css修改滚动条默认样式

html代码:这是内容111这里是内容222这里是内容333css代码:.inner{width: 265px;height: 400px;position: absolute;top: 33px;left: 13px;/*cursor: pointer;*/overflow:hidden;}.innerbox{overflow-x: hidden;overflow-y: auto;color: #000;font-size: .7rem;font-family: &qu…

下列不属于html5语义元素,HTML5 新的语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分:HTML5中新的语义元素HTML5 元素标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。根据W3C HTML5文档: section 包含了一组内容及其标题。WWFThe World Wide Fund for Nature (WWF) is....HTM…

【Android Developers Training】 81. 解析XML数据

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。 原文链接:http://developer.android.com/training/basics/network-ops/xml.html 可扩展…

java核心面试_不正确的核心Java面试答案

java核心面试总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站。 这可能意味着错误或过时的答案可能永远不会得到纠正。 这是一些不太正确或已经过时的问题和答案。 即是Java 5.0之前的版本。 每个提供的问题后都有两个部分。 斜体的第一部分指示…

outlook自动保存html,当创建一个新的HTML电子邮件时保持默认的Outlook格式

我想创建一个简单的脚本来创建一个HTML消息,并且我想保留尽可能多的默认值。当创建一个新的HTML电子邮件时保持默认的Outlook格式在我的情况下,当我使用Home创建一个新邮件->新邮件时,它总是会创建一个默认字体[Calibri 11],格…

干加个偏旁可以变成什么字_面试官:“干”字加一笔,变成什么字?回答王和午字不对...

随着大学生的增多,如今的求职者进入职场,想到一份心仪的工作,最让人头疼的就是面试,越来越多的企业都需要全能型的人才,从而在面试的时候不仅要考核专业知识,面试官还要费尽心思出各种各样的题来考验求职者…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

国际站html代码,国际站必须看得懂的HTML代码

国际站必须看得懂的HTML代码國産〇〇柒大家每天都忙着找关键词,忙着写标题,忙着做各种的优化。目的就是想把自己的产品排名到前面,获得更多的曝光,带来更多的询盘。在这个过程中我们是客服同事也是一名搜索优化人员,但…

phoengap–node+websocket在线聊天室

该实验项目基于: phonegapnodewebsocket可以应用于android 和 ios平台。 已经测试通过。以下是测试的图: 首先是用node 架设服务器。 基本上都node 基于websocket的。 主要是对message做处理和判断来进行输出和逻辑处理 而客户都,由于android…

中音萨克斯指法表图_萨克斯的几个特殊指法记忆和几个概念

大家在平常的练习和吹奏的时候,经常会出现找不到相应的指法的情况,有经验的萨友们通过长时间的摸索,会找到其中的一些规律。实际上,能看懂“一图在手,不用再担心找不到指法了”里面的表格,可以起到同样的作…

计算机网络结构示意图,计算机网络原理-计算机网络体系结构.pdf

绪论  计算机 网络概述一、计算机网络的发展过程截止 目前为止 ,计算机网络 已发展到第 四代 , 即出现了第四代计算机网,它们是:第一代 :面 向终端 的计算机 网络第二代 :分组交换计算机 网络 (包括国际标…

git配置和使用

1、注册bitbucket用户登录bitbucket站点https://bitbucket.org/注册一个用户,注册后用户名为linjiqin,邮箱为linjiqindkhs.com。 2、Create repository(仓库)登录bitbucket,点击“Create”按钮会出现一个Create a new repository页面&#xf…

操作系统饥饿现象_操作系统心得体会

一、操作系统1.基本概念操作系统简称OS,是配置在计算机硬件上的第一层软件,它能够有效的组织和管理计算机系统中的硬件和软件资源,合理的组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能。OS是现代计算机…

组态王怎么做超级曲线_鸭肉怎么做?大叔教你红烧鸭块,香气扑鼻,简单易做,超级好吃...

晚餐总是要有硬菜上桌的,所谓硬菜无非是鸡鸭鱼肉,买只鸭子吧,倒也是不在乎哪天吃大荤,鸭子算是减肥食谱,对高血压,心脏病有一定的好处,另外,癌症病人不能吃鸡,鸭子却是可…

计算机应用能力考试ppt,计算机应用能力考试题库

计算机应用能力考试题库计算机应用能力考试在考试设计时,不能要求所有的应试人员考相同的内容,不同的应试人员应能根据自身的特点和需要选择适合自己的考试内容。以下是关于计算机应用能力考试题库,希望大家认真阅读!单选题1.PowerPoint2003的…

查询DB中每个表占用的空间大小

使用如下sql script可以获得每个数据库表所占用的空间大小,单位是KB create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100)) declare name varchar(100) declare cur curs…

java高频面试_C ++或Java,高频交易哪个更快?

java高频面试总览 关于什么是高频交易的最佳解决方案,存在不同意见。 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义。 我的看法 如果您有一个典型的Java程序员和一个典型的C 程序员,并且每个人都有几年编写典型的面向对…

mysql字段简索引_MySQL常用的一些语句,索引,字段等

1、库相关:建库:character set:指定编码COLLATE:排序规则 utf8mb4_general_ci 大小写不敏感CREATE DATABASE test_db default character set utf8mb4 COLLATE utf8mb4_general_ci;查看建库语句:SHOW CREATE DATABASE t…

计算机动画专业要学什么课程,计算机动画制作专业主要课程有哪些?

对于想要报考计算机动画制作专业的同学来说,现在也有很多同学对于该专业还是比较感兴趣的,而且计算机动画制作专业现在的发展形势也是比较好的,那么计算机动画制作专业主要课程有哪些?培养目标重点培养学生各类平面、三维艺术、动漫设计能力…

hadoop关联文件处理

c001.txt ------------------------------ filetype|commid|commname|addressidcomm|1|罗湖小区1|1comm|2|罗湖小区2|1comm|3|宝安小区1|4comm|4|南山小区1|3comm|5|南山小区2|3comm|6|福田小区1|2comm|7|福田小区2|2comm|8|宝安2|4comm|9|南山3|3 c002.txt ------------------…