博客
关于我
JVM垃圾回收机制总结(8) :反思和参考资料
阅读量:475 次
发布时间:2019-03-06

本文共 1674 字,大约阅读时间需要 5 分钟。

垃圾回收的悖论:Java垃圾回收的挑战与优化方案

垃圾回收是Java开发中一个长期关注的课题。尽管Java的垃圾回收机制为开发者提供了极大的便利,但在高性能、高并发场景下,它也成为了性能瓶颈的主要原因。JDK的垃圾回收算法一直无法完全解决内存耗尽带来的暂停问题,这直接影响了程序的响应时间,导致资源阻塞和性能下降。这也是JDK引入G1垃圾回收算法的重要背景。

系统设计的关键问题

在技术的基础上,我们需要从系统设计的角度重新审视内存管理问题:

  • 内存分配的合理性:我们是否必须为应用分配如此大的内存空间?
  • 内存使用的优化:是否可以通过更高效的内存管理方式来减少内存占用,而不是仅仅依靠内存扩大?
  • 内存中的内容

    内存中的存储内容主要包括以下几类:

  • 业务相关数据:如Web应用中的Session、即时消息的会话等,这些数据在用户访问周期或使用过程中通常需要持久化存储。
  • 缓存:缓存是优化应用性能的重要手段,快速访问的数据应存储在缓存中。
  • 线程:线程在运行时也会占用内存资源。
  • 如果我们能够将业务数据和缓存从JVM中独立出来,或者通过更智能的内存管理方式减少JVM的内存占用,Java应用所需的内存将会显著减少,从而降低垃圾回收的负担。

    解决之道

  • 数据库与文件系统

    将所有数据存储在数据库或文件系统中是最简单的方式。在这种模式下,Java应用的内存占用仅需处理一次峰值并发请求所需的内存量。数据的获取和处理都可以在每次请求时从数据库或文件系统中动态获取。这种方式虽然效率较低,但内存占用最低,适合对内存敏感的场景。

  • 内存-硬盘映射

    如果避免直接读写文件系统,可以通过模拟硬盘的方式来提升效率。这种方式允许我们在内存中进行读写操作,同时仍然保持内存占用的低水平。Memcached等缓存解决方案正是基于此原理,能够在保持高效的同时减少内存占用。

  • 多JVM部署

    将同一应用划分为多个JVM进程(横拆)或模块(纵拆)进行部署,可以有效控制每个JVM的内存占用和垃圾回收压力。这种方式类似于分布式处理,但需要额外处理进程间通信和资源管理的问题。

  • 程序控制的对象生命周期

    理想的解决方案是让程序本身控制对象的生命周期。这种方式可以通过编程手段标识哪些对象可以在特定时间后直接回收,减少垃圾回收的标记和处理时间。这种方式类似于C/C++的内存管理,但如果JVM能够实现,将是垃圾回收的重大进步。

  • 线程分配

    Java的传统阻塞式线程模型在高并发场景下效率较低。随着NIO技术的普及,开发者逐渐转向非阻塞式线程模型,通过减少线程数量降低资源消耗。未来可能会有更先进的异步I/O(AIO)技术进一步提升性能。

  • 参考资料

    • 《Java 理论与实践: 垃圾收集简史》
    • 《Java SE 6 HotSpotTM Virtual Machine Garbage Collection Tuning》
    • 《Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1》
    • 《Hotspot memory management whitepaper》
    • 《Java Tuning White Paper》
    • 《Diagnosing a Garbage Collection problem》
    • 《Java HotSpot VM Options》
    • 《A Collection of JVM Options》
    • 《Garbage-First Garbage Collection》
    • 《Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine》
    • 《JProfiler试用手记》
    • 《Java6 JVM参数选项大全》
    • 《深入Java虚拟机》

    以上内容仅供参考,具体实施前请结合实际场景进行调整。

    转载地址:http://pnmbz.baihongyu.com/

    你可能感兴趣的文章
    mysql id自动增长 初始值 Mysql重置auto_increment初始值
    查看>>
    MySQL in 太多过慢的 3 种解决方案
    查看>>
    Mysql Innodb 锁机制
    查看>>
    MySQL InnoDB中意向锁的作用及原理探
    查看>>
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    Mysql Row_Format 参数讲解
    查看>>