当前位置: 首页 > news >正文

JVM专题之内存模型以及如何判定对象已死问题

体验与验证

2.4.5.1 使用visualvm

**visualgc插件下载链接 :https://visualvm.github.io/pluginscenters.html

https://visualvm.github.io/pluginscenters.html

**选择对应JDK版本链接--->Tools--->Visual GC**
 

2.4.5.2 堆内存溢出

* **代码**

java
@RestController
public class HeapController {
    List<Person> list=new ArrayList<Person>();
    @GetMapping("/heap")
    public String heap(){
        while(true){
            list.add(new Person());
        }
    }
}
```

记得设置参数比如-Xmx20M -Xms20M**

* **运行结果**

`访问`:http://localhost:8080/heap  http://localhost:8080/heap

```
Exception in thread "http-nio-8080-exec-2" java.lang.OutOfMemoryError: GC overhead limit exceeded
```

2.4.5.3 方法区内存溢出

> **比如向方法区中添加Class的信息**

* **asm依赖和Class代码**

```xml
<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>
```

```java
public class MyMetaspace extends ClassLoader {
    public static List<Class<?>> createClasses() {
        List<Class<?>> classes = new ArrayList<Class<?>>();
        for (int i = 0; i < 10000000; ++i) {
            ClassWriter cw = new ClassWriter(0);
            cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "Class" + i, null,
                    "java/lang/Object", null);
            MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
                    "()V", null, null);
            mw.visitVarInsn(Opcodes.ALOAD, 0);
            mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
                    "<init>", "()V");
            mw.visitInsn(Opcodes.RETURN);
            mw.visitMaxs(1, 1);
            mw.visitEnd();
            Metaspace test = new Metaspace();
            byte[] code = cw.toByteArray();
            Class<?> exampleClass = test.defineClass("Class" + i, code, 0, code.length);
            classes.add(exampleClass);
        }
        return classes;
    }
}
```

* **代码**

```java
@RestController
public class

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【论文阅读】-- Strscope:不规则测量的时间序列数据的多尺度可视化
  • 开源协作wiki和文档软件Docmost
  • 生物墨水:3D组织生物打印的基石
  • 操作系统笔记分享(第一章 操作系统引论)
  • 包装类的128陷阱
  • ES6 之 Set 与 Map 数据结构要点总结(一)
  • SLF4J的介绍与使用(有logback和log4j2的具体实现案例)
  • 提高交易决策质量,Anzo Capital昂首资本只需两个交易策略
  • java-spring boot光速入门教程(超详细!!)
  • java 实现人脸检测
  • Java后端开发(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)
  • 事务性消息
  • ts-01.泛型(函数和接口)
  • 列表渲染 v-for
  • 2.贪心算法.基础
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Electron入门介绍
  • If…else
  • Javascript编码规范
  • miaov-React 最佳入门
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty源码解析1-Buffer
  • pdf文件如何在线转换为jpg图片
  • 简析gRPC client 连接管理
  • 算法之不定期更新(一)(2018-04-12)
  • 异步
  • 用 Swift 编写面向协议的视图
  • 栈实现走出迷宫(C++)
  • 最简单的无缝轮播
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Java并发新构件之Exchanger
  • #、%和$符号在OGNL表达式中经常出现
  • (13)DroneCAN 适配器节点(一)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (顺序)容器的好伴侣 --- 容器适配器
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .Net Web窗口页属性
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 快速重构概要1
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .pop ----remove 删除
  • @RequestBody与@ResponseBody的使用
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ SNOI 2013 ] Quare
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [ActionScript][AS3]小小笔记
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [autojs]autojs开关按钮的简单使用
  • [BZOJ3223]文艺平衡树
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [C++]四种方式求解最大子序列求和问题
  • [dfs] 图案计数