内存溢出和内存泄露、并行和并发、Minor GC和Full GC的区别

内存溢出和内存泄露的区别

1、内存溢出

内存溢出指的是程序在申请内存的时候,没有足够大的空间可以分配了。

2、内存泄露

内存泄露指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无用。内存泄露一般都是因为内存中有一块很大的对象,但是无法释放。
从定义上可以看出,内存泄露终将导致内存溢出。
注意,定位虚拟机问题内存问题的时候第一步就是要判断到底是内存溢出还是内存泄露,前者好判断,跟踪堆栈信息就可以了;后者比较复杂一点,一般都是老年代中的大对象没释放掉,要通过各种办法找出老年代中的大对象没有被释放的原因。

并行和并发的区别

这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,可以这么理解这两个名词:

1、并行Parallel

多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态

2、并发Concurrent

指用户线程与垃圾收集线程同时执行(但并不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上

Minor GC和Full GC的区别

1、新生代GC(Minor GC)

指发生在新生代的垃圾收集动作,因为大多数Java对象存活率都不高,所以Minor GC非常频繁,一般回收速度也比较快

2、老年代GC(Major GC/Full GC)

指发生在老年代的垃圾收集动作,出现了Major GC,经常会伴随至少一次的Minor GC(但并不是绝对的)。Major GC的速度一般要比Minor GC慢上10倍以上

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 89,777评论 17 311
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 6,012评论 2 31
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,677评论 3 83
  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight阅读 1,443评论 1 0
  • 夜空中最闪亮的星 海王星是我爱的星 今天是海王星开始进入为期159天逆行状态,这次逆行到11月25日才会结束。在双...
    欧皇seif阅读 156评论 0 3