java.lang.OutOfMemoryError: Java heap space
在java程序运行中可能会报如上的错误,通常是在运行过程中内存占用了没有别释放造成的。
以前可能没法跟踪可能是很痛苦的事情,现在好了,我们有一个调试软件可以用了,在生产环境下使用的jRockit软件进行调试,是oracle公司出品的。
前两天试用了一下真的很不错。
前阵子有个程序跑2个礼拜左右就会堆栈溢出,始终找不到头绪,后来使用jrockit才找到问题的出处。
jrockit是可以调试远程程序也可以调试本地程序的。
具体调试步骤
(一)
如果是调试本地程序的话,启动jrockit,然后启动本地需要调试的程序,会在左侧工具栏 本地目录下创建一个连接为需要调试的程序,在上面点击右键,就会启动跟踪。
如何跟踪呢,我的办法就是等,在跟踪开始后,进行截图,然后等程序运行一段时间后查找堆增长比较大的并且一直没有释放的变量。
(二)
然后在上面点击右键,显示分配跟踪。
(三)
然后找到对应的方法,然后就去找问题吧,看看是不是那个地方有内存一直没有释放啊。
然后说点我自己的小经验,也许是不对的,但是我在我的应用里面确实是有效的。
在经常需要调用的地方将变量设成全局的甚至是静态的,我的操作是设成全局的了。图省事呢。呵呵,因为我的变量时全局都要调用的而且是频繁调用的。
用完的变量一定要记得让它等于null,否则执行gc()貌似是不给回收的。
基本上jrockit跟踪是很强的,都能够找到你的问题所在,要仔细观察,改完程序后记得再重新跟踪下直到没有内存泄露为止。
写完手工。
题外话,写多线程的时候建议使用线程池来操作。
分享到:
相关推荐
【Linux堆栈溢出问题详解】 堆栈溢出是一种常见的软件安全漏洞,尤其在Linux和Unix系统中。这种漏洞允许攻击者通过向程序的堆栈区域写入超出预期的数据量来破坏程序的正常运行,从而可能获取更高的权限,如root权限...
3. 如何处理堆栈溢出异常(StackOverflowError),这通常发生在递归调用过深或者无限循环时。 4. 深入理解JVM的内存模型,特别是堆栈和堆的区别,以及垃圾回收对堆的影响。 总之,这个"java 堆栈的演示程序"为我们...
本文将深入探讨Java堆栈的概念、工作原理以及它们在程序执行中的角色。 1. 堆(Heap) - 堆是Java内存模型中的主要部分,主要用于存储对象实例。所有的类实例和数组都在堆中分配内存。 - 堆内存是动态分配的,...
Java内存溢出(Out Of Memory,OOM)是Java应用程序运行时常见的问题,它通常发生在程序对内存需求超过了Java虚拟机(JVM)所能提供的可用内存时。本文将深入探讨Java内存溢出的原因、表现以及如何解决。 1. **Java...
Java程序的每个线程中都有一个独立的堆栈。 容易发生内存溢出问题的内存空间包括:Permanent Generation space和Heap space。 第一种OutOfMemoryError:PermGen space 这种问题的原因为程序中使用了大量的jar或...
Java堆栈内存分析是Java编程中的重要概念,它关乎程序的性能优化和内存泄漏的预防。堆和栈是Java内存管理的两个主要区域,它们各自承担着不同的职责。本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。...
Java 堆栈溢出与 JVM 垃圾回收机制 Java 堆栈溢出是指 Java 应用程序在堆栈中存储的数据超过了堆栈的容量限制,从而导致程序崩溃的一种错误。这种错误通常是由于程序中的循环递归或死循环引起的。 在 Java 虚拟机...
### Java堆栈的区别详解 #### 一、预备知识—程序的内存分配 程序在运行时,根据不同的数据类型和用途,会被分配到不同的内存区域。这些区域包括: 1. **栈区(Stack)**:这部分内存由编译器自动管理,主要用于...
本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space溢出以及Native Heap溢出,并提供相应的解决方案。 1. **JVM PermGen space溢出** - ** PermGen space** 是JVM内存模型中的...
堆栈溢出的解决方法 在计算机科学中,栈溢出是一种常见的编程错误,发生在程序的栈空间不足以存储所有的局部变量和函数调用信息时。如果栈溢出不被及时解决,可能会导致程序崩溃或出现未知的错误。因此,了解栈溢出...
本课程由IT十八掌徐培成讲解的"Java基础第04天-04.OOP-堆栈的溢出与设置-private关键字"深入探讨了两个关键主题:堆栈溢出和private关键字的使用。 首先,让我们来理解堆栈溢出。在计算机编程中,内存分为堆和栈两...
以下是关于Java和Maven2在处理堆栈溢出问题以及企业项目最佳实践的一些详细知识点: 1. **Maven配置**:Maven的`pom.xml`文件是项目的核心配置,其中可以设置堆栈大小。通过添加`-Xms`和`-Xmx`参数到`...
当Java应用出现内存溢出问题时,JProfiler可以生成堆栈快照,这有助于分析导致内存溢出的具体原因。通过堆栈快照,开发者可以看到对象的引用链,找出持有大对象的根源,以便进行针对性的优化。 **5. 线程监控** ...
同时,“内存溢出问题.txt”将提供关于内存溢出的实例和解决方案,帮助你更好地应对这类问题。“堆栈说明.txt”则会深入讲解堆栈的工作原理、栈溢出及其预防措施。 通过深入学习和实践这些知识,你将能够有效地管理...
连接到我的堆栈溢出问题 - 这个项目是在 android 上测试 espresso。 没有“哈克”我就无法让它工作 为了使它工作,我必须注释这段代码: Espresso . onView( ViewMatchers . withId( R . id . email)) . perform( ...
### 图片过大引起的内存溢出解决方案 在Android开发过程中,我们经常会遇到因加载大尺寸图片而引发的`OutOfMemoryError`(内存溢出错误)。这种问题通常发生在使用`BitmapFactory`来加载图片时,尤其是在资源有限的...
当“最新的'java'问题-堆栈溢出”页面上出现新的问题时,此插件将通知您。它还会播放小声音。 例如,您正在看书,而无需每次都查看是否有新问题,因为如果有任何新问题,此插件将通知您。 目前仅适用于Windows操作...
### Java内存泄露、溢出检查方法及工具详解 #### 一、引言 在实际的项目开发和运维过程中,经常会遇到Java应用程序出现内存溢出(`java.lang.OutOfMemoryError`)的情况。这类问题不仅影响应用程序的稳定性和性能...
标题中的“was内存溢出 javacore分析工具jca 401”指的是在WebSphere应用服务器(WAS)环境中,出现内存溢出问题时,使用名为JCA(Java Core Analysis)401的工具进行分析的情况。内存溢出是程序运行过程中,因分配...