如图,我们快速的创建一个springboot项目,并将其下载下来。
这里我使用Eclipse,小伙伴们也可以使用IDEA或者其他开发工具也是可以的。
这里我们使用的是SpringBoot工程,如果有的小伙伴对SpringBoot还不太熟悉的,可以上网找一些教程先学习了解一下。
堆内存溢出演示
那么我们如何来构建一个堆内存溢出呢?其实很简单,我们只要定义一个List
对象,然后通过一个循环不停的往List
里面塞对象。因为只要Controller不被回收,那么它里面的成员变量也是不会被回收的。这样就会导致List里面的对象越来越多,占用的内存越来越大,最后就把我们的内存撑爆了。
创建User对象
这里我们先创建一个User对象。
/**
*
*
Title: User
*
Description:
* @author Coder编程
* @date 2020年3月29日
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
}
这里面@Data
、@AllArgsConstructor
、@NoArgsConstructor
用的是lombok注解。不会使用的小伙伴,可以在网上查找相关资料学习一下。
创建Controller对象
接下来我们来创建一个Controller来不停的往List集合中塞对象。
/**
*
*
Title: MemoryController
*
Description:
* @author Coder编程
* @date 2020年3月29日
*/
@RestController
public class MemoryController {
private List userList = new ArrayList();
/**
* -Xmx32M -Xms32M
* */
@GetMapping(“/heap”)
public String heap() {
int i=0;
while(true) {
userList.add(new User(i++, UUID.randomUUID().toString()));
}
}
}
为了更快达到我们的效果,我们来设置两个参数。
-Xmx32M -Xms32M
一个最大内存,一个最小内存。我们的堆就只有32M,这样就很容易溢出。
访问测试
启动时候设置内存参数。