JVM 标签

垃圾收集器与内存分配策略 有更新!

  |   0 评论   |   0 浏览

垃圾收集的历史远远比 Java 久远,在 1960 年诞生于麻省理工学院的 Lisp 是第一门开始使用内存动态分配垃圾收集技术的语言。其作者 John McCarthy 就思考过垃圾收集需要完成的三件事情:

  • 哪些内存需要回收?
  • 什么时候开始回收?
  • 如何回收?

学习了解垃圾收集和内存分配的意义

当需要排查各种内存溢出、内存泄漏的问题时,当垃圾收集成为系统达到更高并发量瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。

垃圾回收比较侧重的内存区域

  • 程序计数器、虚拟机栈、本地方法栈 3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,就不需要过多考虑如何回收的问题了
  • Java 堆方法区 这两个区域则有着很显著的不确定性:一个接口的多个实现类需要的内存可能回不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样,只有处于运行期间,我们才能够知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。垃圾回收器所关注的正是这部分内存该如何管理