`
gpqhl0071
  • 浏览: 54715 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java--堆内存的10个要点

    博客分类:
  • JAVA
 
阅读更多
Java堆中的OutOfMemoryError错误
当JVM启动时,使用了-Xms 参数设置的对内存。当程序继续进行,创建更多对象,JVM开始扩大堆内存以容纳更多对象。JVM也会使用垃圾回收器来回收内存。当快达到-Xmx设置的最大堆内存时,如果没有更多的内存可被分配给新对象的话,JVM就会抛出java.lang.outofmemoryerror,你的程序就会当掉。在抛出 OutOfMemoryError之前,JVM会尝试着用垃圾回收器来释放足够的空间,但是发现仍旧没有足够的空间时,就会抛出这个错误。为了解决这个问题,你需要清楚你的程序对象的信息,例如,你创建了哪些对象,哪些对象占用了多少空间等等。你可以使用profiler或者堆分析器来处理 OutOfMemoryError错误。”java.lang.OutOfMemoryError: Java heap space”表示堆没有足够的空间了,不能继续扩大了。”java.lang.OutOfMemoryError: PermGen space”表示permanent generation已经装满了,你的程序不能再装在类或者再分配一个字符串了。

Java Heap dump
Heap dump是在某一时间对Java堆内存的快照。它对于分析堆内存或处理内存泄露和Java.lang.outofmemoryerror错误是非常有用的。在JDK中有一些工具可以帮你获取heap dump,也有一些堆分析工具来帮你分析heap dump。你可以用“jmap”来获取heap dump,它帮你创建heap dump文件,然后,你可以用“jhat”(堆分析工具)来分析这些heap dump。

Java中的堆空间是什么?
当Java程序开始运行时,JVM会从操作系统获取一些内存。JVM使用这些内存,这些内存的一部分就是堆内存。堆内存通常在存储地址的底层,向上排列。当一个对象通过new关键字或通过其他方式创建后,对象从堆中获得内存。当对象不再使用了,被当做垃圾回收掉后,这些内存又重新回到堆内存中。要学习垃圾回收,请阅读”Java中垃圾回收的工作原理”。

Java堆内存(heap memory)的十个要点:
1. Java堆内存是操作系统分配给JVM的内存的一部分。

2. 当我们创建对象时,它们存储在Java堆内存中。

3. 为了便于垃圾回收,Java堆空间分成三个区域,分别叫作New Generation, Old Generation或叫作Tenured Generation,还有Perm Space。

4. 你可以通过用JVM的命令行选项 -Xms, -Xmx, -Xmn来调整Java堆空间的大小。不要忘了在大小后面加上”M”或者”G”来表示单位。举个例子,你可以用 -Xmx256m来设置堆内存最大的大小为256MB。

5. 你可以用JConsole或者 Runtime.maxMemory(), Runtime.totalMemory(), Runtime.freeMemory()来查看Java中堆内存的大小。

6. 你可以使用命令“jmap”来获得heap dump,用“jhat”来分析heap dump。

7. Java堆空间不同于栈空间,栈空间是用来储存调用栈和局部变量的。

8. Java垃圾回收器是用来将死掉的对象(不再使用的对象)所占用的内存回收回来,再释放到Java堆空间中。

9. 当你遇到java.lang.outOfMemoryError时,不要紧张,有时候仅仅增加堆空间就可以了,但如果经常出现的话,就要看看Java程序中是不是存在内存泄露了。

10. 请使用Profiler和Heap dump分析工具来查看Java堆空间,可以查看给每个对象分配了多少内存。
本文来源:http://www.csdn.net/article/2012-02-20/311988
分享到:
评论

相关推荐

    java-SE-马士兵笔记word

    - 类定义静态概念,对象是动态实例化出来的,位于堆内存中。 - **对象创建**: - 使用`new`关键字创建对象。 - 每个对象拥有独立的成员变量存储空间,除非它们共享静态变量。 以上内容覆盖了Java SE的基础知识...

    程序员面试宝典-java-interview-dictionary-master.zip

    3. 内存模型:JVM内存结构(堆、栈、方法区、本地方法栈),垃圾回收机制,以及如何进行内存泄漏检查。 4. 文件与IO流:理解文件操作,熟悉输入输出流的分类及使用,掌握NIO(New IO)的使用。 三、高级篇 1. 设计...

    基于Java堆内存的10个要点的总结分析

    以下是关于Java堆内存的10个要点的详细分析: 1. **堆内存的分配**: 当Java应用程序启动时,JVM会在操作系统中申请一块内存区域作为堆空间。在32位系统上,默认初始大小可能为128MB,而在64位系统上,这个值可能...

    java基础要点总汇

    Java基础要点涵盖了语言的历史、特性、数据类型、内存管理、命名规则等多个方面,对初学者构建扎实的Java编程基础至关重要。通过理解和掌握这些核心概念,将有助于开发者在后续的Java学习和实践中更加游刃有余。

    java基础知识要点汇总

    - **堆内存**:存放所有对象实例。 - **栈内存**:存储局部变量和方法调用信息。 - **垃圾回收**:自动回收不再使用的对象,避免内存泄漏。 10. **设计模式** - **单例模式**:确保一个类只有一个实例。 - **...

    java内存对象分配过程研究

    ### Java内存对象分配过程研究 #### 一、引言 Java作为一门强大的面向对象编程语言,在实际开发过程中,对象的创建及其内存管理是至关...希望本文能够帮助开发者更好地理解和掌握Java内存管理的核心概念和技术要点。

    115个Java面试要点.zip

    14. **JVM优化**:堆内存设置,方法区(元空间)理解,栈内存,类加载机制,以及如何通过JMX监控JVM。 15. **编程原则与最佳实践**:DRY(Don't Repeat Yourself),KISS(Keep It Simple, Stupid),SOLID原则,...

    Java面试要点(适用于2年以上经验,1年亦可)

    Java 面试要点(适用于 2 年以上经验,1 年亦可) Java 是一种广泛使用的编程语言,涵盖了基础知识、JVM、并发、锁、...10. 不使用 synchronized 如何实现一个线程安全的单例 11. sleep 和 wait 12. wait 和 notify

    java-practices:Java技术要点的一系列实践

    了解Java虚拟机(JVM)的工作原理,包括堆内存、栈内存、方法区、本地方法栈等,以及垃圾回收机制,对于性能优化和问题排查非常关键。 九、设计模式 设计模式是解决常见编程问题的模板,如单例、工厂、观察者、装饰...

    java最新面试宝典

    - 堆内存的分配策略。 - 方法区与元空间的存储机制。 - 运行时常量池的使用。 - **面试考察要点:** - 内存溢出与内存泄漏的区别。 - GC算法的种类及其优缺点。 #### 三、类加载 **3.1 类的加载过程** - **...

    java内存优化资料汇总

    - **Eclipse Memory Analyzer (MAT)**:一个基于Eclipse的工具,用于分析Java堆内存快照,帮助开发者找到内存泄漏和其他性能问题。 - **VisualVM**:除了监视内存使用情况外,VisualVM还提供了线程分析、CPU使用情况...

    JAVA考试知识覆盖要点

    **JAVA考试知识覆盖要点** Java作为一种广泛使用的编程语言,其在软件开发领域的应用无处不在。对于准备参加Java考试的人员来说,理解并掌握以下几个关键知识点至关重要: 1. **Java基础** - **语法**: 包括变量...

Global site tag (gtag.js) - Google Analytics