知识大全 发现Java虚拟机内存泄露问题

Posted 变量

篇首语:寸阳分阴须爱惜,休负春色与时光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 发现Java虚拟机内存泄露问题相关的知识,希望对你有一定的参考价值。

发现Java虚拟机内存泄露问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

内存泄露问题对于程序来说 是一个很难发现 并且容易引起严重灾害的事情 Java一直以其垃圾回收机制为自豪 那是否这种机制就是完美的呢

  常规理解上 Java的内存管理机制是将局部变量保存在堆中 当变量的作用域结束之后 该变量所占用的内容会被自动回收 不需要做任何特殊的处理 比如下面的代码

public class JavaMemory      private final int dataSize = (int) (Runtime getRuntime() maxMemory() * );      public void f()                        byte[] data = new byte[dataSize];                    byte[] data = new byte[dataSize];             public static void main(String[] args)           JavaMemoryPuzzle jmp = new JavaMemoryPuzzle();          jmp f();        

  在这个例子中 方法f()里定义了两个局部变量 变量data 和data 的作用域不同 按照正常理解 虽然两各个数组所需要的内存之和已经超过了可用内存 但是因为data 会被及时回收 不会出现内存溢出错误

  如果我们实际执行这个例子 会发现出现了java lang OutOfMemoryError错误 这是为什么?如果在BEA或者IBM的虚拟机上测试过这个例子 并不会出现错误 也就是说 SUN的JVM在内存回收机制上存在漏洞或者BUG

  这个问题该如何修正呢 方法其实很简单 只需要在变量作用域结束之前 将变量置为空就可以了 修改之后的结果如下

public class JavaMemory      private final int dataSize = (int) (Runtime getRuntime() maxMemory() * );      public void f()                        byte[] data = new byte[dataSize];              data = null;                    byte[] data = new byte[dataSize];             public static void main(String[] args)           JavaMemoryPuzzle jmp = new JavaMemoryPuzzle();          jmp f();         public class JavaMemory      private final int dataSize = (int) (Runtime getRuntime() maxMemory() * );      public void f()                        byte[] data = new byte[dataSize];                int i= ;          byte[] data = new byte[dataSize];             public static void main(String[] args)           JavaMemoryPuzzle jmp = new JavaMemoryPuzzle();          jmp f();         cha138/Article/program/Java/hx/201311/27088

相关参考

知识大全 关于设置Java虚拟机(JVM)的内存问题

关于设置Java虚拟机(JVM)的内存问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近做

知识大全 深入Java虚拟机之内存优化

深入Java虚拟机之内存优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 java虚拟机管理大内存

 众所周知jvm的内存是受限的一为机器的体系架构二为操作系统本身xxSPARC的内存映射是不同而各操作系统的内存管理机制也有区别以下是来自;Heap设定与垃圾回收JavaHeap分为个区Yo

知识大全 Java人员谈论内存泄露问题分析

Java人员谈论内存泄露问题分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多人在谈论内存

知识大全 用java监视系统进程的两个解决方案

  用第一个java虚拟机启动另一个虚拟机并用第一个虚拟机的java程序去测试另一个虚拟机上java程序运行时的内存CPU资源占用情况  解决问题的限制和条件  》两个虚拟机运行在同台Windows_

知识大全 Java垃圾收集算法与内存泄露

Java垃圾收集算法与内存泄露  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集算法的核心

知识大全 提高代码质量及字节码防止内存错误

  大多Java程序员知道他们的程序通常不会被编译为本机代码而是被编译为由java虚拟机(JVM)执行的字节码格式然而很少有java程序员曾经看过字节码因为他们的工具不鼓励他们去看大多Java调试工具

知识大全 深究Java虚拟机

深究Java虚拟机  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!JVM:JavaVirtualMa

知识大全 Java程序员的迷失—论“虚拟机”

Java程序员的迷失—论“虚拟机”  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  虚拟机技术现在

知识大全 《深入理解Java虚拟机》笔记

《深入理解Java虚拟机》笔记  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    在C里面我们想