首页 > 系统相关 >写内存溢出的例子

写内存溢出的例子

时间:2023-11-19 19:31:57浏览次数:32  
标签:JavaVMStackOOM void 例子 static 内存 new public 溢出

在JVM的几个内存区域中,除了程序计数器外,其他几个运行时区域都有发生内存溢出(OOM)异常的可能,重点关注堆和栈。

Java堆溢出

Java堆用于储存对象实例,只要不断创建不可被回收的对象,比如静态对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会产生内存溢出异常(OutOfMemoryError)。

这就相当于一个房子里,不断堆积不能被收走的杂物,那么房子很快就会被堆满了。

public class HeapOOM {
  static class OOMObject {
  }
  public static void main(String[] args) {
    List<OOMObject> list = new ArrayList<OOMObject>();
    while (true) {
    	list.add(new OOMObject());
    }
  }
}

虚拟机栈.OutOfMemoryError

JDK使用的HotSpot虚拟机的栈内存大小是固定的,我们可以把栈的内存设大一点,然后不断地去创建线程,因为操作系统给每个进程分配的内存是有限的,所以到最后,也会发生OutOfMemoryError异常。

public class JavaVMStackOOM {
  private void dontStop() {
    while (true) {
    }
  }
  public void stackLeakByThread() {
    while (true) {
    Thread thread = new Thread(new Runnable() {
      public void run() {
      dontStop();
      }
  	});
  thread.start();
  	}
  }
  public static void main(String[] args) throws Throwable {
    JavaVMStackOOM oom = new JavaVMStackOOM();
    oom.stackLeakByThread();
  }
}

标签:JavaVMStackOOM,void,例子,static,内存,new,public,溢出
From: https://blog.51cto.com/u_16269508/8475475

相关文章

  • ogre_v13.6.1的Tutorial例子
    这里使用的是Ogre官网提供的预编译的ogre-sdk-v13.6.1-msvc141-x64,假设解压在E:\ogre-sdk-v13.6.1-msvc141-x64,环境变量设置OGRE_HOMEe:\ogre-sdk-v13.6.1-msvc141-x64OGRE_CONFIG_DIRe:\ogre-sdk-v13.6.1-msvc141-x64\binPATH添加:%OGRE_HOME%\bin VC2019C++控制台......
  • CUDA:页锁定内存(pinned memory)和按页分配内存(pageable memory )
    CUDA架构而言,主机端的内存分为两种,一种是可分页内存(pageablememroy),一种是页锁定内存(page-lock或pinned)。可分页内存是由操作系统APImalloc()在主机上分配,页锁定内存是由CUDA函数cudaMallocHost()和cudaHostAlloc()在主机内存中分配,页锁定内存的重要属性是主机的操作系统......
  • Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
    Jenkins打包shell出现gradle命令不存在,jvm内存溢出......
  • 一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner
    前言我们在使用Windows系统的时候经常会遇到一些程序不会释放已分配的内存,从而导致电脑变得缓慢。今天给大家推荐一款.NET开源的小巧、智能、免费的Windows内存清理工具:WinMemoryCleaner。使用Windows内存清理工具来优化内存,这样不必浪费时间去重新启动电脑。工具主要特点......
  • 【pwn】[FSCTF 2023]2str --整数溢出绕过
    检查一下保护状态接着ida看代码逻辑看func函数第一次看真没发现有什么漏洞,题目给了backdoor,虽然strlen可以\x00绕过,但是strcpy函数也限制漏洞的实现。仔细看的话,会发现v3的类型是 unsigned__int8v3;说明v3是一个字节来表示的,可表示的范围只有0~255,那这样绕过思路就很清......
  • go map删除元素后内存是否会释放
    go底层map是由若干个bmap(桶)构成的,桶只会扩容,不会缩容,所以map中占用的内存不会被释放但是!!!以上只针对值类型的数据结构例如:基本类型intstringslicestruct等如果key为指针变量删除后这个指针变量内存不会释放,但是这个指针指向的对象,引用计数会-1如果引用......
  • 【MAT】内存分析工具
    MAT下载Linux版本:链接:https://pan.baidu.com/s/1jdYASRmM01zFgh_wxmdEWA?pwd=6aww提取码:6awwMAC版本:链接:https://pan.baidu.com/s/1Dzi0frJ0oNessPfbmy-tmw?pwd=q8rm提取码:q8rm(之前下载的时候,eclipse老是打不开,挺累的。)......
  • 云主机CPU和内存配比:优化资源分配的关键
    本文分享自天翼云开发者社区《云主机CPU和内存配比:优化资源分配的关键》,作者:每日知识小分享随着云计算技术的快速发展,云主机已经成为了许多企业和个人用户首-选的计算解决方案。在部署和配置云主机时,CPU和内存的配比是一个非常重要的考虑因素。本文将深入探讨云主机CPU和内存配比......
  • FreeRTOS 原理 --- 最少剩余可用栈 与 栈溢出检查
    函数 uxTaskGetStackHighWaterMark()可用于获取任务的最少剩余可用栈#if(INCLUDE_uxTaskGetStackHighWaterMark==1)UBaseType_tuxTaskGetStackHighWaterMark(TaskHandle_txTask){TCB_t*pxTCB;uint8_t*pucEndOfStack;UBaseType_tuxRetur......
  • Java数组03:三种初始化及内存分析
    声明的时候数组并不存在,只有创建的时候数组才存在  publicclassArrayDemo02{publicstaticvoidmain(String[]args){//静态初始化:创建+赋值int[]a={1,2,3,4,5,6,7,8};System.out.println(a[0]);//动态初始......