java内存泄漏原因(从内存角度分析,而不是从语法角度)
2017-12-30 17:19
323 查看
昨天面试官大哥问了我JVM的垃圾回收算法,我答不上来,然后大哥说,内存泄漏是基于JVM的垃圾回收算法之上的。我当时还理解的还不太深刻,说了一串引用仍持有等等的东西来解释内存泄漏。其实不是的,我说的只是从语法层面出发的东西,正确的答案应该是,从内存的角度去分析啊。
所以感兴趣可以先看看http://blog.csdn.net/qq_36523667/article/details/78937304 JVM入门,java环境基础+理解内存+垃圾判定、回收算法
现在从内存的角度去解释内存泄漏。
内存中用户可以使用的是
程序存储区
静态存储区
动态存储区
比较容易忽视的是在动态存储区未释放内存或无法释放内存导致的内存泄漏。一句话来说就是,情况1:通过确定垃圾对象的算法(可达性算法),发现依然是可达的,所以垃圾回收器就不会回收它;情况2:可达性算法发现是不可达的,但是由于某种原因,垃圾回收器回收不了他。这就是内存泄漏的两种情况了(这是我看了JVM的垃圾搜寻 算法和垃圾回收算法个人的理解)。
产生方式
常发性内存泄漏
发生内存泄漏的代码会被多次执行到,每次发生都有一块内存泄漏
偶发性内存泄漏
某些特定情况下才会发生
一次性内存泄漏
发生内存泄漏的代码只会被执行一次
隐式内存泄漏
程序在运行的时候不断分配内存,直到结束的时候才释放内存。严格来说没有发生内存泄漏,但是这个内存释放不及时,对于服务器程序来说,会运行很久吧,到那个时候就boom了。(这是最难检测到的)
所以感兴趣可以先看看http://blog.csdn.net/qq_36523667/article/details/78937304 JVM入门,java环境基础+理解内存+垃圾判定、回收算法
现在从内存的角度去解释内存泄漏。
内存中用户可以使用的是
程序存储区
静态存储区
动态存储区
比较容易忽视的是在动态存储区未释放内存或无法释放内存导致的内存泄漏。一句话来说就是,情况1:通过确定垃圾对象的算法(可达性算法),发现依然是可达的,所以垃圾回收器就不会回收它;情况2:可达性算法发现是不可达的,但是由于某种原因,垃圾回收器回收不了他。这就是内存泄漏的两种情况了(这是我看了JVM的垃圾搜寻 算法和垃圾回收算法个人的理解)。
产生方式
常发性内存泄漏
发生内存泄漏的代码会被多次执行到,每次发生都有一块内存泄漏
偶发性内存泄漏
某些特定情况下才会发生
一次性内存泄漏
发生内存泄漏的代码只会被执行一次
隐式内存泄漏
程序在运行的时候不断分配内存,直到结束的时候才释放内存。严格来说没有发生内存泄漏,但是这个内存释放不及时,对于服务器程序来说,会运行很久吧,到那个时候就boom了。(这是最难检测到的)
相关文章推荐
- 从java内存分配角度分析android内存泄漏问题
- java中内存泄露有几种?如何分析泄露原因
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏
- 从内存分配角度分析c和java里的static 关键字.
- JAVA内存泄漏原因和内存泄漏检测工具
- JAVA内存泄漏原因和内存泄漏检测工具
- JAVA内存泄露的原因分析
- eclipse中java语法错误原因分析(原创)
- 分析java内存泄漏的原因
- 分析java内存泄漏的原因
- java学习之旅60--数组_多维数组_基本语法_内存分析
- JAVA进程占用高内存原因分析与优化方法
- 内存监控方法之——Jmap结合Memory Analyzer,分析java程序是否存在内存泄漏
- JAVA进程占用高内存原因分析与优化方法
- JAVA程序内存溢出问题原因分析
- Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析
- JAVA进程占用高内存原因分析与优化方法
- JAVA内存泄漏--内存泄漏原因和内存泄漏检测工具(zt)
- java基础--1.基本语法 - 7.内存分析
- 牛客网Java刷题知识点之内存溢出和内存泄漏的概念、区别、内存泄露产生原因、内存溢出产生原因、内存泄露解决方案、内存溢出解决方案