|
当我开始学习Java编程时,我不知道什么是堆内存或堆空间,我甚至不知道当对象创建时,它们被放在了哪里。当我开始正式写一些程序后,我会经常遇到java.lang.outOfMemoryError的报错,之后我才开始关注什么是堆内存或者说堆空间(heapspace)。下面就由卓跃教育为您做一个介绍。
对大多数程序员都经历过这样的过程,因为学习一种语言是非常容易来的,但是学习基础是非常难的,因为没有什么特定的流程让你学习编程的每个基础,使你发觉编程的秘诀。对于程序员来说,知道堆空间,设置堆空间,处理堆空间的outOfMemoryError错误,分析heapdump是非常重要的。这个关于Java堆的教程是给我刚开始学编程的兄弟看的。如果你知道这个基础知识或者知道底层发生了什么,当然可能帮助不是那么大。除非你知道了对象被创建在堆中,否则你不会意识到OutOfMemoryError是发生在堆空间中的。我尽可能的将我所知道的所有关于堆的知识都写下来了,也希望你们能够尽可能多的贡献和分享你的知识,以便可以让其他人也受益。
Java中的堆空间是什么?
JavaHeapdump
Heapdump是在某一时间对Java堆内存的快照。它对于分析堆内存或处理内存泄露和Java.lang.outofmemoryerror错误是非常有用的。在JDK中有一些工具可以帮你获取heapdump,也有一些堆分析工具来帮你分析heapdump。你可以用“jmap”来获取heapdump,它帮你创建heapdump文件,然后,你可以用“jhat”(堆分析工具)来分析这些heapdump。
Java堆内存(heapmemory)的十个要点
1.Java堆内存是操作系统分配给JVM的内存的一部分。
2.当我们创建对象时,它们存储在Java堆内存中。
3.为了便于垃圾回收,Java堆空间分成三个区域,分别叫作NewGeneration,OldGeneration或叫作TenuredGeneration,还有PermSpace。
4.你可以通过用JVM的命令行选项-Xms,-Xmx,-Xmn来调整Java堆空间的大小。不要忘了在大小后面加上”M”或者”G”来表示单位。举个例子,你可以用-Xmx256m来设置堆内存最大的大小为256MB。
5.你可以用JConsole或者Runtime.maxMemory(),Runtime.totalMemory(),Runtime.freeMemory()来查看Java中堆内存的大小。
6.你可以使用命令“jmap”来获得heapdump,用“jhat”来分析heapdump。
7.Java堆空间不同于栈空间,栈空间是用来储存调用栈和局部变量的。
8.Java垃圾回收器是用来将死掉的对象(不再使用的对象)所占用的内存回收回来,再释放到Java堆空间中。
9.当你遇到java.lang.outOfMemoryError时,不要紧张,有时候仅仅增加堆空间就可以了,但如果经常出现的话,就要看看Java程序中是不是存在内存泄露了。
10.请使用Profiler和Heapdump分析工具来查看Java堆空间,可以查看给每个对象分配了多少内存。
|
|