`
白浪滔天
  • 浏览: 88366 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

写Java代码分别使堆溢出,栈溢出

    博客分类:
  • java
阅读更多

 

我们知道,在JAVA中,可以使用关键字new来创建Java对象。例如,

ArrayList list = new ArrayList();

实际上,在创建完上面的一个对象后,在JVM中,会把new出来的对象存放在堆内存中,

同时,在方法栈中存放着对象的引用关系。

如果想要堆溢出,比较简单,可以循环创建对象或大的对象;

如果想要栈溢出,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹,

直到内存不够分配,产生栈溢出。

 

因此,可以使用下面简单的代码实现堆溢出和栈溢出。

public class Test {

    public void testHeap(){
        for(;;){
              ArrayList list = new ArrayList (2000);
          }
    }
    int num=1;
    public void testStack(){
        num++;
        this.testStack();
     }
    
    public static void main(String[] args){
        Test  t  = new Test ();
        t.testHeap();
        t.testStack();   
    }
}

 

 另外,Java虚拟机的堆大小如何设置:命令行

 java –Xms128m //JVM占用最小内存

           –Xmx512m //JVM占用最大内存

           –XX:PermSize=64m //最小堆大小

           –XX:MaxPermSize=128m //最大堆大小

 

分享到:
评论
1 楼 daoqidelv 2014-05-26  
递归调用可以导致栈溢出
不断创建对象可以导致堆溢出

相关推荐

    理论:第十三章:堆溢出,栈溢出的出现场景以及解决方案.docx

    堆溢出、栈溢出的出现场景及解决方案 堆溢出是指 Java 应用程序在堆内存中申请空间时超出限制,导致内存...堆溢出和栈溢出都是常见的 Java 错误,通过调整 JVM 参数、优化代码和使用堆外内存等方式可以解决这些问题。

    java内存溢出示例(堆溢出、栈溢出)

    内存溢出分为两种主要类型:堆溢出(Heap Overflow)和栈溢出(Stack Overflow)。接下来,我们将深入探讨这两种情况及其示例。 首先,我们来看堆溢出。在Java中,堆内存用于存储对象实例,当创建的对象过多,导致...

    Java中堆内存和栈内存详解

    - 栈内存的空间相对较小,当方法中存在大量数据时可能会导致栈溢出错误(StackOverflowError)。 #### 三、堆内存 堆内存主要用于存储通过`new`关键字创建的对象和数组。这是Java程序的主要内存区域之一,所有对象...

    Java内存溢出解决办法

    如果递归深度过大或者每个线程创建了大量局部变量,可能会导致栈溢出。`java.lang.OutOfMemoryError: Stack overflow error`即表示这种情况。解决方案是优化代码,减少递归或调整栈的大小(通过-Xss设置)。 3. **...

    kettle内存溢出(Java heap space)以及解决方法.docx

    5. **代码优化**:检查并优化Kettle的自定义脚本或Java代码,避免无用的对象创建和内存泄漏。 6. **定期清理和释放资源**:确保Kettle在处理完数据后,及时释放不再使用的对象和资源,避免内存碎片。 最后,监控...

    从 Java 代码到 Java 堆 理解和优化您的应用程序的内存使用

    - **栈溢出**:过深的递归或过多的本地变量也可能导致栈溢出。优化算法或减少局部变量的使用是解决方法之一。 总的来说,理解Java内存使用并进行优化不仅涉及Java代码的编写,还包括对JVM和操作系统内存管理的深刻...

    内存溢出配置,内存溢出配置

    在Java中,主要分为堆内存溢出(Heap Space OutOfMemoryError)和永久代/元空间溢出(PermGen/MethodArea OutOfMemoryError)。其中,堆内存用于存储对象实例,而永久代或元空间则主要用于存储类的元数据。 ### 2. ...

    Java中堆内存与栈内存分配浅析

    了解Java中的堆和栈内存分配有助于优化程序性能,避免内存泄漏和内存溢出等问题。开发者应当合理使用堆和栈,确保对象的正确创建和销毁,同时注意内存的高效利用,以提高程序的运行效率。在编程实践中,通常建议尽...

    JAVA内存溢出详解.doc

    Java内存主要分为堆内存(Heap)和栈内存(Stack),堆是存储对象实例的主要区域,而栈主要用于存储基本类型和对象引用。除此之外,还有方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native ...

    Java中堆和栈的区别

    Java中的堆和栈是两种不同的内存区域,它们在程序运行时承担着不同的职责。栈主要用于存储基本类型变量和对象的引用,而堆则用于存储对象实例。...理解这两者的差异对于写出高效、内存友好的Java代码至关重要。

    java内存溢出解决方案

    Java内存溢出问题通常指的是Java应用程序在运行过程中由于内存分配不当或使用过度导致JVM无法分配更多的内存,从而抛出`java.lang.OutOfMemoryError`异常。本文将深入探讨Java内存溢出的不同类型及其解决方案。 1. ...

    android 扫描文件栈溢出问题,自己写的扫描文件方法

    标题提到的“自己写的扫描文件方法”很可能就是导致栈溢出的原因。通常,开发者在遍历文件系统时,会使用递归方式,但如果不设置适当的限制,递归深度过深就会使栈空间耗尽。解决这个问题的一种常见策略是使用迭代而...

    Java 内存溢出解决办法

    在Java中,内存分为几个区域:堆(Heap)、栈(Stack)、方法区(Method Area,Java 8后被元空间取代)以及程序计数器和本地方法栈。当"Java.lang.OutOfMemoryError: Java heap space"错误出现时,表示程序运行过程...

    java 内存中 堆、栈、常量池、方法区的总结

    在Java内存管理中,堆(Heap)、栈(Stack)、常量池(Constant Pool)和方法区(Method Area)是四个核心概念,它们在Java程序运行时扮演着不同的角色。 首先,方法区是用来存放类的信息、常量、静态变量等数据的...

    内存溢出解决

    - **栈内存溢出**:每个线程都有自己的栈,如果线程请求栈深度超过虚拟机所允许的最大深度,也会导致栈溢出。 ##### 3. **诊断工具** 为了更准确地定位问题,开发者可以借助多种工具进行诊断: - **VisualVM**:...

    Java编程常见内存溢出异常与代码示例

    Java栈溢出异常 在Java中,栈是虚拟机栈的内存区域,用来存储局部变量表、操作数栈、方法出口等信息。如果我们创建一个无限递归的递归调用,当递归深度过大时,就会耗尽栈空间,进而导致StackOverflowError异常。 ...

    java 内存溢出分析工具 HeapAnalyzer

    - 理解Java内存模型(堆、栈、方法区等)对使用内存分析工具至关重要。 总之,HeapAnalyzer是Java开发者处理内存溢出问题的强大助手。通过熟练掌握其使用,我们可以有效地定位并解决内存问题,提升应用的稳定性和...

    java内存机制 堆和栈.doc

    总的来说,理解Java内存机制的堆和栈有助于编写更高效、更稳定的代码。正确地管理内存可以避免性能瓶颈和内存溢出问题,而深入理解对象创建和引用的工作方式则有助于优化程序设计,尤其是在处理大量对象或复杂数据...

    java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具

    2. 非堆内存:包括JVM自身使用的内存(如方法区、元空间)和线程栈,这部分内存也可能导致溢出。 3. GC(Garbage Collection):Java的自动内存管理机制,如果GC无法有效地回收不再使用的对象,可能导致内存泄漏。 4...

Global site tag (gtag.js) - Google Analytics