当前位置:网站首页>jvm内存溢出练习记录
jvm内存溢出练习记录
2022-06-09 10:34:00 【lucky_tom】
理解多少写多少,多删少补当勤奋
练习目标:
对jvm的几种常见的内存溢出进行回顾练习
内存溢出的类别:
- 堆溢出 - java.lang.OutOfMemoryError: Java heap space
- 栈溢出 - java.lang.StackOverflowError
- 栈溢出 - java.lang.OutOfMemoryError
- 方法区(元数据空间)溢出 - java.lang.OutOfMemoryError: Metaspace
- 直接内存溢出 - java.lang.OutOfMemoryErrorDirect buffer memory
堆溢出
最常见也是最容易遇到的OOM,一直在创建对象过多且GC无法回收,超过jvm堆的空间参数上限。
/** * -Xms1m -Xmx1m -XX:+PrintGCDetails */
public class HeapOOM {
byte[] bytes;
public HeapOOM() {
bytes = new byte[1024];
}
public static void main(String[] args) throws Throwable{
ArrayList<HeapOOM> heapOOMS = new ArrayList<>();
int space = 10240;
for (int i = 0; i < space; i++) {
heapOOMS.add(new HeapOOM());
}
}
}
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at HeapOOM.(HeapOOM.java:11)
at HeapOOM.main(HeapOOM.java:19)
栈溢出1
第一种,单个栈内申请的空间超过jvm限制的上限(冰箱里面的啤酒瓶爆炸)
/** * -Xss1m */
public class JVMStackOOM {
private byte[] bytes = new byte[1024];
public void func(){
while (true){
new Thread(() -> {
try {
Thread.sleep(60*60*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
public static void main(String[] args) {
JVMStackOOM jvmStackOOM = new JVMStackOOM();
jvmStackOOM.func();
}
Exception in thread “main” java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:717)
at JVMStackOOM.func(JVMStackOOM.java:19)
at JVMStackOOM.main(JVMStackOOM.java:25)
栈溢出2
第二种,单个栈内申请的空间超过jvm限制的上限(冰箱堆满了啤酒瓶,冰箱爆炸)
/** * -Xss1m */
public class JVMStackOverFlow {
public void func(){
func();
}
public static void main(String[] args) throws Throwable{
JVMStackOverFlow jvmStackOverFlow = new JVMStackOverFlow();
jvmStackOverFlow.func();
}
}
Exception in thread “main” java.lang.StackOverflowError
at JVMStackOverFlow.func(JVMStackOverFlow.java:7)
方法区溢出
大多数由于类加载过多(常见反射)超过jvm规定的上限。
需要引用 cglib.jar
/** * -XX:MaxMetaspaceSize=10M -XX:MetaspaceSize=10M */
public class MetaspaceOOM {
public int age;
public String name;
public static void main(String[] args) {
while (true) {
Enhancer enhancer=new Enhancer();
enhancer.setSuperclass(OOMObject.class);
enhancer.setUseCache(false);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
return methodProxy.invokeSuper(o,args);
}
});
enhancer.create();
}
}
static class OOMObject {
}
Caused by: java.lang.OutOfMemoryError: Metaspace
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
直接内存溢出
如果使用MaxDirectMemorySize限制,若超过这个,就溢出。
如果没有MaxDirectMemorySize限制,超过物理内存,就溢出。
/**
-Xmx20M -XX:MaxDirectMemorySize=10M
*/
public class DirectoryMemoryOOM {public static void main(String[] args) {
ByteBuffer.allocateDirect(1024102412);
}
}
> Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:694)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
at DirectoryMemoryOOM.main(DirectoryMemoryOOM.java:10)
边栏推荐
- MySQL 学习笔记-第三篇-索引、存储过程和函数、视图、触发器
- RDMA Verbs API
- Music creation tool Steinberg Cubase Pro
- MySQL learning notes - Chapter 5 - data backup and recovery, MySQL logs
- 多线程系列之线程优先级和线程安全
- 叶酸配体的金属有机骨架材料MOFs负载5-氟尿嘧啶,西达本胺,紫杉醇,阿霉素,柔红霉素等药物
- Cyclodextrin metal organic framework( β- Cd-mof) loaded with dimercaptosuccinic acid( β- CD-MOF/DMSA) β- Drug loading mechanism of cyclodextrin metal organic framework
- new和malloc区别和malloc详解
- Openkruise v1.2: add persistentpodstate to realize stateful pod topology fixation and IP reuse
- 不止于观测|阿里云可观测技术峰会正式上线
猜你喜欢

基于任务调度的企业级分布式批处理方案

Comptage du réseau | unités de chaque couche du Modèle OSI
[email protected] -199 loaded drug ciprofloxacin"/>[email protected] -199 loaded drug ciprofloxacin

MySQL 学习笔记-第五篇-数据备份与恢复、MySQL 日志

excel条件格式使用详细步骤

What are the preparations for building your own website

Enterprise distributed batch processing scheme based on task scheduling

太神奇的 SQL 查询经历,group by 慢查询优化!

Thirty eight JS tried fractal graphics on canvas (II) tried mountain building, painted mountains and the basis of angular geometry

Music creation tool Steinberg Cubase Pro
随机推荐
GaussDB(DWS) 分区自动管理介绍
web开发重点,简单开发web
执行引擎-(编译器、JIT)
自己建设网站需要做哪些准备
Document writing specification
中金财富开户安全吗
计网 | OSI模型中各层单位
使用五数概括法来确定数据集中的孤立点
Amazing SQL query experience, group by slow query optimization!
php redis 常用操作手册
Configurationmanager pose flash
Leetcode 2048. 下一个更大的数值平衡数(有点意思,已解决)
[email protected]负载5-氟尿嘧啶|[email protected]装载5
Network planning | units of each layer in OSI model
Matlab related function knowledge points (III) -floor function + dot division operator + matrix index rules
【Pyhton 实战】---- 批量【端午节】海报下载
Flink CDC + Hudi 海量数据入湖在顺丰的实践
no provider available for the service错误解决方案
基于C语言实现的网络嗅探器设计课程设计
Quartz multiple schedulers + thread pool mode to schedule tasks separately