Java Memory 管理简单介绍

  • Garbage Collector优势

当我们在使用一个没有Garbage Collector机制的语言编程的时候,我们会碰到一些很难发现的bug,因为这些bug和我们手动释放内存空间相关。典型的有一下两个问题。

  1. 空指针,当我们使用一段空间的引用释放了这块空间的时候,可能还有别的引用指向这块空间。但是这块空间已经被释放掉了,所以当我们使用另外一个引用去读取这块空间内容的时候,可能读取的是其他的内容了。这个是我们不想看到的。
  2. 内存泄露。内存泄露就是程序在运行的过程中,没有引用指向这段空间。但是这段空间也没有明确的释放掉。例如在一个列表中,我们本来是想释放整个列表的,但是我们不小心只释放了第一个节点。这样就会导致内存的泄露。

利用Garbage Collector机制,就能避免上述的两个问题。对于第一个问题,只要还有引用只想某段空间,这段空间就不会被释放掉。内存泄露的话,因为都是Java自己回收的,所以也也不会出现这样的问题,Garbage Collector会释放掉全部没有引用的内存空间。

  • Java中有这样的几段空间
  1. Eden Space(heap),大多数的object都是在这里被创建的,除了一些较大的object。
  2. Survivor Space(heap),那些在Eden Space的Garbage Collector留下来的Object会在这段空间里。
  3. Tenured Generation(heap), 那些在Survivor Space经过几次Garbage Collector留下来的Ojbect会进入这个空间,也包括上面提到的一些较大的Object,会直接创建在这段空间里。
  4. Permanent Generation(non-heap),在这段空间里,包含了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值