JVM调优_堆内存溢出和非堆内存溢出

文章目录

            • 1. pom
            • 2. MemoryController
            • 3. User 对象
            • 4. 动态生成class文件工具类
            • 5. 启动项目
            • 6. 测试连接
            • 7. 异常信息

1. pom
 <!--动态生成class文件--><dependency><groupId>asm</groupId><artifactId>asm</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
2. MemoryController
package com.gblfy.chapter2;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;
import java.util.UUID;@RestController
public class MemoryController {private List<User> userList = new ArrayList<User>();private List<Class<?>> classList = new ArrayList<Class<?>>();/*** 构造堆内存溢出* 最大内存: -Xmx32M* 最小内存: -Xms32M* -Xmx32M -Xms32M*/@RequestMapping("/heap")public void heap() {int i = 0;while (true) {userList.add(new User(i++, UUID.randomUUID().toString()));}}/*** 构造非堆内存溢出* 最大Metaspace: -XX:MaxMetaspaceSize=32M* 最小Metaspace: -XX:MetaspaceSize=32M* -XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M*/@RequestMapping("/noheap")public void noheap() {while (true) {classList.addAll(Metaspace.createClasses());}}
}
3. User 对象
package com.gblfy.chapter2;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class User {private int id;private String name;
}
4. 动态生成class文件工具类
package com.gblfy.chapter2;import java.util.ArrayList;
import java.util.List;import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;/**https://blog.csdn.net/bolg_hero/article/details/78189621* 继承ClassLoader是为了方便调用defineClass方法,因为该方法的定义为protected* */
public class Metaspace extends ClassLoader {public static List<Class<?>> createClasses() {// 类持有List<Class<?>> classes = new ArrayList<Class<?>>();// 循环1000w次生成1000w个不同的类。for (int i = 0; i < 10000000; ++i) {ClassWriter cw = new ClassWriter(0);// 定义一个类名称为Class{i},它的访问域为public,父类为java.lang.Object,不实现任何接口cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "Class" + i, null,"java/lang/Object", null);// 定义构造函数<init>方法MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>","()V", null, null);// 第一个指令为加载thismw.visitVarInsn(Opcodes.ALOAD, 0);// 第二个指令为调用父类Object的构造函数mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object","<init>", "()V");// 第三条指令为returnmw.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;}
}
5. 启动项目

为了方便快速模拟,需要设置堆内存参数

在这里插入图片描述

在这里插入图片描述

6. 测试连接
测试堆内存溢出链接:
http://localhost/heap测试非堆内存溢出链接:
http://localhost/noheap
7. 异常信息

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用split_size优化的ODPS SQL的场景

使用split_size优化的ODPS SQL的场景 首先有两个大背景需要说明如下&#xff1a; 说明1&#xff1a;split_size&#xff0c;设定一个map的最大数据输入量&#xff0c;单位M&#xff0c;默认256M。用户可以通过控制这个变量&#xff0c;从而达到对map端输入的控制。设置语句&am…

「今天沾一口野味,明天地府相会!」AI如何抗击「野味肺炎」

河南信阳七星鹏社区宣&#xff08;来源&#xff1a;微博-在信阳&#xff09;整理 | 阿司匹林出品 | CSDN云计算「今天沾一口野味&#xff0c;明天地府相会&#xff01;」这是本次在抗战「野味肺炎」一线中表现突出的河南人民打出的标语。为什么本次疫情被称为「野味肺炎」&…

如何自动导出内存映像文件?

内存溢出自动导出&#xff1a; -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./测试&#xff1a; http://localhost/heap-Xmx32M -Xms32M -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./

为了30分钟配送,盒马工程师都有哪些“神操作”?

阿里妹导读&#xff1a;提到盒马鲜生&#xff0c;除了新鲜的大龙虾以外&#xff0c;大家印象最深的就是快速配送&#xff1a;门店附近3公里范围内&#xff0c;30分钟送货上门。 盒马是基于规模化和业务复杂度两个交织&#xff0c;从IT到DT&#xff0c;从原产地到消费者而形成的…

滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动

作者 | Just来源 | AI科技大本营&#xff08;ID:rgznai100&#xff09;开源热情就是好玩儿。说起他在22年前的第一款开源软件LVS&#xff08;Linux Virtual Server&#xff09;&#xff0c;章文嵩这样描述彼时心态。从一开始做这个后来名噪一时的Linux集群项目他就没想着赚钱&a…

数据清理的终极指南

我花了几个月的时间分析来自传感器、调查及日志等相关数据。无论我用多少图表&#xff0c;设计多么复杂的算法&#xff0c;结果总是会与预期不同。更糟糕的是&#xff0c;当你向首席执行官展示你的新发现时&#xff0c;他/她总会发现缺陷&#xff0c;你的发现与他们的理解完全不…

使用jmap命令手动导出映像文件?

jmap -helpjps -ljmap -dump:formatb,fileheap.hprof 16240注释&#xff1a;16240 进程号

重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

3 月 21 日北京阿里云峰会&#xff0c;阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表&#xff0c;以及 Oracle 之外的 Java 生态中为数不多的 OpenJDK 定制者&…

AI程序员的远方是诗和梦想的美好?还是骨感无望的现实?

人工智能真的玩大了吗&#xff1f;人工智能行业的人才真的“爆发了&#xff1f;”AI程序员究竟怎么样&#xff1f;A与B 薪酬与前景程序员与远方2017年~2018年&#xff0c;是人工智能大火的时候。你会发现&#xff0c;跟朋友聊天不谈人工智能&#xff0c;聊天的bigger都上不去。…

十年再出发:阿里云智能战略加速的“四级火箭”

3月21日&#xff0c;在2019阿里云峰会北京站上&#xff0c;阿里云智能总裁张建锋首次对外阐述了阿里云战略加速的“四级火箭”&#xff1a;达摩院加持的云、数据智能的云、最佳实践的云和被集成的云&#xff0c;从技术、产品、商业和生态层面开启阿里云的下一个十年。 达摩院加…

使用MAT工具分析内存溢出

https://www.eclipse.org/mat/downloads.php对象数量 对象占用的大小 熟练掌握着2个工具栏

张建锋:一两年内,阿里巴巴100%的业务都会上公共云

3月21日&#xff0c;在2019阿里云峰会北京站上&#xff0c;阿里云智能总裁张建锋在主题演讲中表示&#xff0c;“全站云化”的时代已经到来&#xff0c;整个阿里经济体正在All In Cloud&#xff0c;成为“云上的阿里巴巴”。 张建锋表示&#xff0c;“目前阿里巴巴60%到70%是跑…

你抢的不是春节红包而是云

作者 | 马超编辑 | 胡巍巍来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近年来&#xff0c;红包大战堪称是新春佳节中最精彩的开年大戏。2015年腾讯以超过5000万元的天价&#xff0c;拿下央视春晚独家合作权&#xff0c;一夜之间为微信支付带来1亿多张新增银行卡…

PLSQL查询字段为科学计数法,修正显示

打开PLSQL工具— toad中->view->option->data->display large number in scientific notation pl/sql developer中->tools->preferences->sql windows->number fields tochar 在PLSQL中&#xff0c;数据库中记录的NUMBER类型的数据&#xff0c;如果…

阿里云不做SaaS、要练好内功被集成,发布SaaS加速器

在3月21日的2019阿里云峰会北京上&#xff0c;阿里云发布新产品SaaS加速器&#xff1a;人工智能、虚拟现实等技术能力被集成为模块&#xff0c;ISV和开发者只要简单拖拽&#xff0c;就可以快速搭建SaaS应用。 “我想试驾一下&#xff0c;怎么办&#xff1f;” “我们集成了虚拟…

阿里云明确生态边界:不做SaaS、被集成

“练好内功被集成&#xff0c;阿里云自己不做SaaS&#xff0c;让大家来做更好的SaaS。”3月21日&#xff0c;在2019阿里云峰会北京现场&#xff0c;阿里云智能总裁张建锋首次明确阿里云的生态边界和被集成战略。 大会舞台上&#xff0c;张建锋与20多位合作伙伴代表一一握手相迎…

windows mysql5.7 忘记root密码

编辑此文件 添加一行 skip-grant-tables重新启动mysql net stop mysql net start mysql跳过密码登陆 mysql -u root -p 直接按回车2次 修改密码 update mysql.user set authentication_stringpassword("root") where user"root";刷新权限 flush pri…

Docker容器资源管理,你真的学会了吗?

作者 | 张晋涛编辑 | 胡巍巍来源 | GitChat&#xff08;ID&#xff1a;GitChat&#xff09;Docker 上手很容易&#xff0c;但如果将其应用于生产环境&#xff0c;则需要对它有更深入的理解。只有这样&#xff0c;才能确保应用符合我们的预期&#xff0c;或在遇到问题时可及时解…

java封装原则_跟我学java编程—理解Java面向对象的封装原则

前面一节内容讲到了抽象与对象&#xff0c;抽象是把同类事物的共同特征抽取出来归纳为类&#xff0c;类的具体实例为对象。例如&#xff1a;把具有汁液多、糖分多、含有挥发性芳香物质、可以生食等特征的事物归纳为水果类&#xff0c;苹果、葡萄、生梨则为水果类的具体示例对象…

天桥调参师秘籍:一份深度学习超参微调技术指南

随着深度学习的兴起&#xff0c;越来越多的人从事算法工程师这一岗位。有时候他们自嘲自己为“天桥调参师”。当然&#xff0c;算法工程师的工作内容并没有那么简单&#xff0c;因为设置超参数的过程需要专业知识和广泛的试验和试错过程。尤其是针对学习率&#xff08;learning…