`
gqf2008
  • 浏览: 76774 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Space4J进行Java的内存持久化

    博客分类:
  • java
阅读更多

Space4J 是一个简单的数据库系统,它使你可以在内存中与Java集合协同工作。由于内存对数据的随机访问速度要比磁盘快几个数量级,所以Space4J为性能关键的“实时”Web应用和系统提供了更好的可伸缩性。

通过使用Space4J,如果想从数据库表中取出一个User,开发者就无需执行SQL SELECT语句了,而只需访问一个users map(java.util.Map),然后调用users.get(id)。因为所有的数据都保存在JVM所管理的内存中,所以就无需额外的数据库应 用、socket连接、JDBC驱动、SQL语句或者任何ORM工具等。数据就在那儿,在对象中,在Java maps中。如果你想修改数据,那么你需要创建一个Command对象,然后将其序列化并保存到磁盘上的一个日志文件中。当重启时,上次的 commands就会从日志文件中被读取进来并被再次使用,然后生成与系统崩溃前一样的数据集。

应用会不时地将所有数据的快照存储到磁盘上以防止日志文件变得过大。Space4J将所有数据都保存在Space对象中。当进行快照时,整个 Space对象会被序列化并存储到磁盘上。因此当重启时,只有上次快照后的commands而不是全部需要重新应用。快照的大小取决于应用。除非使用了 Space4J集群,否则系统必须进入只读模式才能将快照保存到磁盘上。这方面的一个例子就是处于负载平衡下的Web应用,这时每个Web服务器都需要有 一个Space4J节点。

与Space4J一起发布的还有一个完善的索引框架,该框架支持4种不同的索引类型从而方便以多种方式来搜索数据。它也可用在通常的数据库中以进行离线处理、数据仓库、报表等等。

Space4J使用了Java 1.6的并发数据结构来处理对数据的并发读/写访问,因此写只会阻塞写、而读则不会阻塞其他操作,也不会被其他操作阻塞。这意味着一次只能进行一个修改操 作,但读操作就可以并发执行而不会抛出ConcurrentModification异常!

你可以下载最新版 (0.9.1)或者查看源代码仓库

如果你想进一步了解关于将数据访问从磁盘转换到内存中,以得到更好的性能及其他数据访问的话题 ,请阅读InfoQ上Steven Robbins所写的文章——“RAM是新的硬盘 ”。

查看英文原文: Java In-Memory Persistence with Space4J

分享到:
评论

相关推荐

    关于(java heap space)内存溢出的解决办法

    - 使用内存分析工具MAT(Memory Analyzer Tool)对dump文件进行深度分析,找出内存泄漏的根源。 ### 5. 代码示例 在实际应用中,可以通过以下方式查看当前JVM的内存配置: ```java public class MemoryInfo { ...

    java内存机制及异常处理

    解决这些问题的方法包括但不限于调整JVM参数以增大内存分配、优化代码以减少内存占用、及时关闭不再使用的资源(如数据库连接)以及使用内存分析工具检测和修复内存泄漏。正确理解和运用Java内存机制以及异常处理...

    JAVA内存溢出详解.doc

    - **内存泄漏检测**:使用内存分析工具,如VisualVM、MAT(Memory Analyzer Tool)等,找出程序中的内存泄漏问题。 4. **垃圾收集机制** Java的垃圾收集器负责自动回收不再使用的对象所占用的内存。了解并优化...

    解决Java_heap_space问题

    解决Java heap space问题的关键在于合理配置JVM参数,优化内存使用效率,以及排查潜在的内存泄漏。以下是一些有效的解决方案: 1. **调整JVM参数** - 使用`-Xms`和`-Xmx`参数设置JVM的初始堆大小和最大堆大小。...

    java内存泄漏解决

    解决Java内存泄漏问题需要从多方面入手,包括合理设置JVM参数、优化代码逻辑、使用合适的工具进行监控等。开发者应该具备良好的编码习惯,并定期进行性能调优,以确保应用程序能够稳定高效地运行。

    kettle内存溢出(Java heap space)以及解决方法.docx

    4. **使用Pentaho Data Integration(Kettle)的并行处理功能**:通过工作流并行化,分散内存压力,让多个节点同时处理数据。 5. **代码优化**:检查并优化Kettle的自定义脚本或Java代码,避免无用的对象创建和内存...

    JAVA内存溢出问题总结

    JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决...

    JAVA内存溢出

    这种问题的原因为Java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关。解决这类问题有两种思路: 1. 检查程序,看是否有死循环或不必要地重复创建大量对象。...

    Java内存溢出解决办法

    堆内存主要用于存储对象实例,当创建大量对象或者单个对象占用大量内存时,如果堆空间不足,就会抛出`java.lang.OutOfMemoryError: Java heap space`。解决方法包括增大堆大小(通过-Xms和-Xmx设置),优化对象创建...

    Java内存结构.pdf

    1. **Java Heap Space**:当堆内存空间不足时,抛出`OutOfMemoryError: Java heap space`。 2. **PermGen Space**:当方法区(永久代)空间不足时,抛出`OutOfMemoryError: PermGen space`。在JDK 8中,由于永久代被...

    基于Java的内存泄露分析及定位

    Java内存管理是一个关键的议题,...总的来说,理解Java内存管理和垃圾收集机制,以及如何使用工具进行分析和定位,是优化Java应用程序性能、避免内存泄漏的关键。通过有效的内存管理,可以确保程序高效且稳定地运行。

    java内存溢出原因

    - **跟踪解决**:通过Jstack分析线程状态,检查JNI调用,减少线程创建,使用内存分析工具如JProfiler、Jprobe、Jrokit定位内存泄露。 为了诊断和解决问题,开发者可以利用以下Java命令: - **jps -mlv**:列出所有...

    Java 内存溢出解决办法

    4. 分析内存使用:使用内存分析工具,如VisualVM、MAT(Memory Analyzer Tool)等,对应用程序进行内存快照分析,找出内存泄漏的源头,然后修复。 5. 监控系统资源:通过JMX(Java Management Extensions)或其他...

    java抛java heap space

    在 Java 应用程序运行过程中,如果出现内存不足的情况,JVM(Java虚拟机)会抛出 `java.lang.OutOfMemoryError: Java heap space` 的异常。这种错误通常发生在应用程序对内存的需求超过了 JVM 能够提供的最大堆空间...

    java解决大批量数据导出Excel产生内存溢出的方案

    - 使用内存分析工具(如VisualVM或YourKit Java Profiler)监控内存使用情况,找出内存泄漏或不必要的对象引用,进行优化。 通过这些方法,我们可以在处理大量数据导出到Excel时避免内存溢出问题,同时保持程序的...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)的堆内存空间已耗尽。 #### 标题和描述中的知识点详解 **标题:“java错误处理:java.lang.OutOfMemoryError:...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    1. 使用 `-Xmx` 参数增加堆的最大使用内存:可以在启动 JVM 时添加 `-Xmx` 参数,例如 `-Xmx512m`,以设置堆的最大使用内存。 2. 使用 `-Xms` 参数设置堆的初始大小:可以在启动 JVM 时添加 `-Xms` 参数,例如 `-Xms...

    Java内存不足PermGen space错误探究.pdf

    5. 分析和优化应用:使用内存分析工具(如VisualVM、MAT等)找出内存消耗大的类和对象,进行代码优化。 了解和掌握Java内存管理机制以及JVM的内存结构对于排查和解决这类问题至关重要。通过合理的内存配置和代码...

Global site tag (gtag.js) - Google Analytics