1.内存溢出

  • 堆上无内存可完成实例分配且堆无法扩展时->OutOfMemeoryError
  • 方法区(以及内部的常量池)无法满足内存分配需求时->OutOfMemoryError
  • 虚拟机栈(本地方法栈)扩展时无法申请到足够的内存->OutofMemoryError

2.内存泄漏

  • 程序动态分配了内存,但在程序结束时没有释放这部分内存,导致那部分内存不可用(代码设计引起的)
  • java也会有内存泄漏:当被分配的对象可达但已经没有作用时。比如Student s1 = new Student(); Student s2 - new Studentt(),然后往ArrayList里放s1,s2,再把s1,s2设成null,但是这两个对象所占内存并没有被释放,因为ArrayList里还存着对象的引用

3.内存溢出,内存泄漏区别?

  • 内存泄露是导致内存溢出的原因之一;内存泄露积累起来将导致内存溢出。
  • 内存泄露可以通过完善代码来避免;内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。

4.如何检测内存泄露?

  • 可以通过一些性能监测分析工具,如 JProfiler、Optimizeit Profiler。

5.如何避免内存泄露、溢出?

  • 尽早释放无用对象的引用。
  • 使用临时变量的时候,让引用变量在退出活动域后自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。
  • 程序进行字符串处理时,尽量避免使用String,而应使用StringBuffer,因为每一个String对象都会独立占用内存一块区域

results matching ""

    No results matching ""