要用java实现一个数据聚合的功能,分为按小时归档和按天归档(归档也可以叫数据聚合、数据老化)。单台归档数据量为150万个归档结构、3000万个归档最小单元(平均每个归档结构包含20个最小归档单元),即每个小时或每天要生成150万个归档结构、3000万个最小单元。当前,归档都是在jvm的内存做的,jvm内存设置为
"-server -Xms20g -Xmx20g -Xmn2g -Xss256k -XX:PermSize=200m -XX:MaxPermSize=200m -XX:MaxDirectMemorySize=6g -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -verbose:gc"。物理机,很强悍、完全可以撑得住jvm的上述设置。
使用这个设计时 出现的问题是,jvm大概一天左右就会fullGC、而且会把jvm直接搞死,估计是jvm管理的内存太大了。
现在考虑解决问题的办法是,将大内存拿到堆外去做,比如尝试了MapDB但发现 MapDB插入大对象的速度实现是可怜(或者我的设置有问题);具体的MapDB设计见下面的代码。
请大家帮忙,给一些解决方案,来替代jvm管理的大内存堆内缓存。
MapDB的初始化设置如下:
db = DBMaker .newMemoryDirectDB() .transactionDisable() .closeOnJvmShutdown() .asyncWriteFlushDelay(100) .compressionEnable() .make();
相关推荐
### Tomcat 6.0 修改启动内存设置及 Java JVM 参数配置详解 #### 一、背景与目的 ...需要注意的是,实际配置时应根据应用程序的具体需求来进行调整,并结合实际情况测试不同的内存配置方案,以找到最优解。
### JVM内存管理 1. **内存区域**: - **堆内存**:所有线程共享的内存区域,用于存放对象实例。 - **栈内存**:线程私有的,主要用于存储局部变量、操作数栈、动态链接等信息。 - **方法区**:用于存储已被...
在标题和描述中提到的“在tomcat的JVM中加上附近中这句话就OK”,这里的“这句话”实际上是指一组用于调整JVM内存配置的参数。具体而言,这组参数是:`-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=256M`。 ...
对于第三方库引发的内存泄漏,可能需要升级到最新版本或寻找替代方案。 总结来说,处理Tomcat内存泄漏涉及对JVM内存管理的深入理解、使用诊断工具、合理配置JVM参数、优化代码以及定期维护。通过正确使用`setenv`...
在使用 Tomcat 进行 Web 应用部署时,可能会遇到内存不足的问题,尤其是在启动大型应用或者应用中存在大量缓存数据的情况下,很容易导致 Java 虚拟机(JVM)内存溢出错误。本文将详细介绍如何调整 Tomcat 的内存配置...
2. **代码问题**:例如使用了第三方库时没有正确关闭资源、缓存管理不当等问题都可能引起内存泄漏。 3. **系统资源限制**:操作系统对进程的资源使用有一定的限制,如果超过了这些限制,也会出现内存不足的情况。 ...
- **变量的存储与读取**:对象最终存储在内存中,但在实际系统中,编译器、运行时环境、处理器或系统缓存可能会有不同的权限来修改变量的存储位置。 - **特权操作**:JMM允许编译器和缓存在处理器特定的缓存和主存...
JVM内存区域分为多个部分,包括程序计数器(记录当前线程执行的指令地址)、虚拟机栈(存储局部变量、操作数栈和方法返回地址)、本地方法栈(用于非Java方法的调用,如JNI)、堆(存储对象实例,线程共享)以及方法...
5. **更新或替换有问题的库**:某些第三方库可能存在内存泄漏,更新到最新版本或寻找替代方案。 通过熟练使用MAT,开发者能更有效地定位和解决Java应用的内存问题,提升应用的稳定性和性能。记住,定期进行内存分析...
JUC(Java Util Concurrent),即Java的并发工具包,是Java提供的一套并发编程解决方案,它通过一系列接口和类简化了并发编程的复杂性。本笔记整理涉及了JUC的内存可见性、volatile关键字以及CAS算法和原子变量等多...
JVM内存分为堆、栈、方法区、本地方法栈和程序计数器五大部分。其中,堆存储对象实例,栈处理方法调用,方法区存储类信息,本地方法栈服务于本地方法,程序计数器记录下一条要执行的指令地址。 5. Applet Applet...
3. **内存调整**:增加Eclipse的JVM内存分配,通过修改eclipse.ini文件来提高Eclipse运行时的内存上限。 4. **清理索引**:定期清除Eclipse的工作区索引,并重新构建,有助于保持其高效性。 5. **禁用无用插件**:...
5. **Groovy 和 Kotlin DSL 支持**:Gradle 使用Groovy作为默认的构建脚本语言,同时也支持Kotlin DSL,这是一种类型安全且更现代的替代方案。5.1.1 版本中,两种DSL的体验都得到了改进,使得编写和维护构建脚本更加...
避免过多使用session存储数据,或考虑使用更轻量级的替代方案,如cookie或分布式缓存。 7. **优化Web应用程序** 优化JSP、Servlet和静态资源,减少不必要的计算和IO操作,使用缓存技术等。 8. **调整线程池** ...
在本文中,我们将深入探讨如何在Spring框架中集成并使用Ehcache作为缓存解决方案。SpringEhcacheOne项目展示了如何通过JavaConfig配置Spring来整合Ehcache,从而提高应用程序的性能和效率。 Ehcache是一款流行的...
这些题目涵盖了Java编程语言、操作系统、网络协议、Java虚拟机(JVM)、并发与线程、内存管理、异常处理、分布式系统以及相关的网络和安全概念。以下是对这些知识点的详细解释: 1. **Java事件机制**:包括事件源、...
- **缓存策略**:如使用`Ehcache`等第三方库提供的缓存解决方案,或者根据具体应用场景设计自定义缓存机制。 以上仅为Java性能优化技巧的部分内容,实际应用中还需要根据具体的业务场景和技术栈来选择最适合的优化...