`
bloodwolf_china
  • 浏览: 131310 次
社区版块
存档分类
最新评论

使用visualvm工具分析Ehcache缓存中内存回收机制

    博客分类:
  • Java
 
阅读更多
这几天发现现网几台服务器的应用有内存泄露的现象,对其中缓存中各个对象数据进行检查,发现ehcache对象数量是2万多个,查询业务表中发现商用状态的业务数据还不到1万。
自己就写一段代码使用visualvm工具。对Ehcache中对象回收机制进行分析
  
   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        CacheManager cacheManager = CacheManager.getInstance();
        long startTime = System.currentTimeMillis();
        println "startTime is " + new Date();
        Cache cache = new Cache("test",4,false,false,5,5);
        cacheManager.addCache(cache);
        cache = cacheManager.getCache("test");
        5.times {
            cache.put(new Element("k$it",new GameServiceVo()));
        }
        println "cache size=" + cache.size + ",keys="+cache.keys+",millis is " + (System.currentTimeMillis()-startTime);
        reader.readLine();
        println "cache size=" + cache.size + ",keys="+cache.keys+",millis is " + (System.currentTimeMillis()-startTime);
        3.times {
            println cache.get("k$it")?.value;
        }
        reader.readLine();
        println "cache size=" + cache.size  + ",keys="+cache.keys+",millis is " + (System.currentTimeMillis()-startTime);
        4.times {
                    cache.put(new Element("k$it",it));
         }
        println "cache size=" + cache.size  + ",keys="+cache.keys+",millis is " + (System.currentTimeMillis()-startTime);
        reader.readLine();
    


    先限定cache中只能放4个对象,生命周期5秒。放入5个GameServiceVo对象,过几十秒秒后检查一下jvm中GameServiceVo对象个数,还是4个






    说明对象未释放,接着读取其中2个对象,得到都是Null,再检查一下jvm中GameServiceVo对象个数,是2个




    再重新放入4个Integer对象,再检查一下jvm中GameServiceVo对象个数,是0个,全部被回收




    Ehcache中对象可以被回收需要以下条件:
1、对象已经过期,被读取一次会删除对象的引用
2、缓存已满,根据清除策略,被清除的对象会被回收
   所以使用ehcache时设置缓存大小时不是越大越好,否则有可能造成ehcache占用内存越来越大,直到缓存已满才能触发对象回收
  
  • 大小: 83.1 KB
  • 大小: 35.6 KB
  • 大小: 37 KB
  • 大小: 30.1 KB
分享到:
评论

相关推荐

    java jvm及性能优化_javajvm优化_Java性能分析_

    5. 缓存优化:利用缓存减少数据库访问,如使用Ehcache或Guava Cache。 六、性能瓶颈分析 1. CPU分析:检查是否有热点方法,通过CPU剖析定位问题代码。 2. 内存分析:关注内存泄露,查看对象生命周期和存活情况。 3....

    SSH整合问题-tomcat内存优化

    8. 系统资源监控:使用监控工具(如JConsole或VisualVM)实时查看和分析Tomcat的内存使用情况,及时发现问题。 综上所述,SSH整合和Tomcat内存优化是Java Web开发中提升应用性能的关键步骤。通过理解各个框架的职责...

    提高Seam系统性能测试点

    - **缓存策略**:合理使用缓存机制,如Ehcache或Infinispan,减少数据库查询。 - **懒加载**:对于不常使用的对象,使用懒加载策略以降低初始化时的资源消耗。 3. **数据库优化**: - **索引优化**:合理创建和...

    java程序性能优化

    6. **监控与分析**:使用工具如VisualVM、JProfiler、YourKit等进行性能监控,分析CPU、内存、线程等状况,找出性能瓶颈。日志和Profiling可以帮助定位问题,而AOP(面向切面编程)可以用于记录方法执行时间,便于...

    msbd.docx

    - **线程分析**:使用工具(如VisualVM)查看线程堆栈信息,分析哪些线程占用了大量CPU资源。 - **热点代码分析**:利用Profiler工具(如JProfiler)找出执行频率较高的代码段,针对性优化。 - **并发模型优化**:...

    深入JVM和调优+高性能并发Web服务器实现核心内幕

    6. **性能分析与优化工具**:除了前面提到的VisualVM和JConsole,JProfiler、YourKit等也是强大的JVM性能分析工具,它们可以帮助开发者找到CPU、内存、线程等方面的瓶颈。 7. **JVM内存模型**:理解JMM(Java内存...

    J2EE 性能优化

    3. **缓存一致性**:在分布式环境中,确保缓存数据的一致性,如使用分布式锁或事件驱动机制。 通过以上这些方面,我们可以对J2EE应用程序进行深度优化,提升系统的响应速度、资源利用率和整体性能。而"Java ...

    j2EE-infrastructure-bottlenecks.zip_site:www.pudn.com

    设置合适的日志级别,使用性能监控工具(如JProfiler、VisualVM)定期检查系统状态,以便及时发现并解决瓶颈。 10. **微服务架构**:随着微服务架构的流行,服务间的通信(如API调用)也可能成为新的瓶颈。采用合适...

    liferay性能调优文档

    3. **缓存策略**:Liferay支持多种缓存机制,如OSCache、EHCache和Infinispan。理解这些缓存机制的工作原理,合理配置缓存策略,能显著减少数据库查询,提高页面加载速度。 4. **数据库优化**:数据库是Liferay性能...

    基于J2EE平台的B/S系统性能优化设计研究.pdf

    10. **监控与日志分析**:定期对系统性能进行监控,通过工具如JProfiler、VisualVM等分析系统瓶颈,根据日志进行问题定位,以便及时调整优化策略。 11. **架构优化**:采用微服务架构,将大系统拆分为多个小服务,...

    java性能优化

    使用本地缓存如Ehcache或分布式缓存如Redis,可以降低数据库访问频率,提高数据获取速度。 6. **线程池配置**: 通过调整线程池的大小、拒绝策略和队列长度,可以平衡系统资源的使用,避免过多的线程切换和资源...

    java performance tuning

    - **VisualVM**:提供更详细的性能分析,包括CPU、内存、线程和方法调用等。 - **jmap, jhat, jstat**:命令行工具用于内存dump、统计信息和堆分析。 6. **JIT编译器**: - **热点代码识别**:JIT会自动识别并...

    Java高手真经 系统架构卷 刘中兵 真实光盘

    2. **JVM深入理解**:了解Java虚拟机的工作原理,包括内存模型、类加载机制、垃圾回收、性能优化等方面,对于提升系统性能和解决运行时问题至关重要。 3. **并发与多线程**:在Java系统架构中,高并发处理能力是...

    Top_10_Java_Performance_Problems

    - **工具辅助**:使用如VisualVM、JProfiler等工具来检测和分析内存泄漏问题。 #### Concurrency ##### 6. Hot Fudge Sundae Standoff: Thread Deadlocks **问题描述**:线程死锁发生在两个或多个线程相互等待对方...

    WebLogic_Server_Performance_and_Tuning

    - **调优工具**:利用各种工具监控系统性能,例如JConsole、VisualVM、WebLogic Server Management Console等。 #### 三、WebLogic Server配置调优 - **内存管理**:合理设置Heap Size(堆大小)、PermGen Size...

    存储优化

    代码层面的优化主要包括减少磁盘I/O操作、避免无谓的数据复制、合理使用内存缓存等。Java的内存模型决定了程序对内存的访问效率,理解Java垃圾回收机制并避免内存泄漏是关键。使用Effective Java等书籍中的最佳实践...

    java性能调优文档(sun)

    - **缓存机制**:启用合适的缓存策略,比如使用Ehcache或OSGi服务层提供的缓存功能来加速数据访问。 3. **代码级优化** - **异步处理**:对于耗时的操作采用异步处理方式,避免阻塞主线程。 - **多线程编程**:...

    Java学期实训_学生选课管理系统

    在测试和优化阶段,Java的单元测试框架JUnit和性能分析工具如VisualVM可以帮助找出并修复潜在问题,优化系统性能。同时,遵循良好的编程规范和设计模式,如MVC(模型-视图-控制器)架构,可以提高代码的可读性和可...

    practical-java-performance-tuning:实用Java性能调整代码

    使用代码分析工具(如SonarQube)找出代码中的性能问题和潜在风险。 11. **JIT编译器**:理解JIT(Just-In-Time)编译器的作用,它是如何将热点代码转换为机器码以提升性能的。使用`-XX:+PrintCompilation`查看哪些...

Global site tag (gtag.js) - Google Analytics