JVM-017-垃圾收集器和内存分配策略概述

  • Java与C++之间有一堵由内存动态分配和垃圾收集技术围城的高墙,城外面的人想进去,城里面的人却想出来。
  • 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情:
    1.哪些内存需要冋收?
    2.什么时候回收?
    3.如何回收?
  • 经过半个多世纪的发展,目前内存的动态分配与内存回收技术已经相当成熟,一切看起来都进人了“自动化”时代,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排査各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发最的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。
  • 把时间从半个多世纪以前拨冋到现在,冋到我们熟悉的Java语言。Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但在本章基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着冋收了。而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存。后面所指的回收也是指这一部分。

其它



源码下载:

关注下方微信公众号,
回复:
JVM.code

完整教程PDF版本下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值