Java基础之堆内存溢出的解决
作者:eddie_k2 发布时间:2023-11-10 20:06:30
一、实战-内存溢出
堆内存溢出
栈内存溢出
方法区溢出
直接内存溢出
二、实战-堆内存溢出
演示堆内存溢出代码,并且定位问题
总结堆内存溢出的场景与解决方案
分析商城项目中可能存在堆内存溢出的代码并且解决
三、堆内存溢出演示代码
public class HeapOOMTest {
private List<String> oomList = new ArrayList<>();
public static void main(String[] args) {
HeapOOMTest oomTest = new HeapOOMTest();
while (true) {
oomTest.oomList.add(UUID.randomUUID().toString());
}
}
}
VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
运行该代码的Main方法
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid18940.hprof ...
Heap dump file created [23854536 bytes in 0.061 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.lang.Long.fastUUID(Long.java:441)
at java.base/java.lang.System$2.fastUUID(System.java:2136)
at java.base/java.util.UUID.toString(UUID.java:395)
at com.imooc.jvminaction.HeapOOMTest.main(HeapOOMTest.java:16)
在项目的根目录会自动创建 java_pid18940.hprof 的文件
Mac系统:mat.app
Win系统:Eclipse Memory Analyzer
四、Eclipse Memory Analyzer 分析流程
File -> Open Heap Dump,加载刚才产生的hprof文件,选择Leak Suspects Report
在Overview, 鼠标移动到拼图,可以看出
java.lang.Thread @ 0xff1dbc28 main
Shallow Size: 120 B RetainedSize: 10.9 MB (明显不正常的)
点击 ++Leak Suspects:++ includes leak suspects and a system overview.
Problem Suspect 1 会提示方法占用空间的百分比
点击 Details » Accumulated Objects in Dominator Tree
点击 java.lang.Object[160065] @ 0xffe00000
List objects --> with incoming references (别人调用自己)
Leak Suspects » Leaks » Problem Suspect 1 » Description » See stacktrace 也是可以看出问题的
jvisualvm.exe 分析堆内存溢出
五、堆内存溢出的场景
内存泄露
借助工具定位问题
非内存泄露
-Xms -Xmx 分配不合理
六、商城项目可能存在堆内存溢出的方法
1.通过控制pageSize判断
if (pageSize > 100) {
pageSize = 100;
}
2.SpringMVC方式
类头加注解
@Validated
pageSize的入参加注解
@Max(100)
来源:https://blog.csdn.net/eddielee9217/article/details/116458011
猜你喜欢
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 这篇文章主要介绍了Java实现TCP/IP协议的收发数据(服务端)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 英文设置加粗可以在xml里面设置: <SPAN style="FONT-SIZE: 18px">androi
- package 移位运算;public class 移位运算 { public static void main(String[] args
- 自定义工具类PropertyUtil,并在该类的static静态代码块中读取properties文件内容保存在static属性中以供别的程序
- 前言多数据源的事务处理是个老生常谈的话题,跨两个数据源的事务管理也算是分布式事务的范畴,在同一个JVM里处理多数据源的事务,比较经典的处理方
- 技术场景在日常的开发、测试或运维的过程中,经常存在这样的场景,开发人员在代码中使用日志工具(log4j、slf4j)记录日志,比如请求ID、
- Android Build类的详解及简单实例一、类结构:java.lang.Object? android.os.Build二、类概述:从系
- mport java.text.DecimalFormat; DecimalFormat &nb
- 本文实例讲述了C#中HttpWebRequest的用法。分享给大家供大家参考。具体如下:HttpWebRequest类主要利用HTTP 协议
- 调用SAP WebService服务需要转换操作1、通过浏览器访问SAP WebService地址,进行验证并生成wsdl文件地址并不是可以
- 本文实例总结了Android开发中Toast显示消息的方法。分享给大家供大家参考,具体如下:Android中提供一种简单的Toast消息提示
- trim中prefix与suffix等标签用法1.prefix 前缀增加的内容2.suffix 后缀增加的内容3.prefixOverrid
- 本文实例讲述了Java继承Thread类创建线程类。分享给大家供大家参考,具体如下:一 点睛通过继承Thread类创建线程并启动多线程的步骤
- 在Java的学习中,涉及到两个系统环境变量path和classpath一. path环境变量path环境变量是系统环境变量的一种,它用于保存
- jpa EntityManager复杂查询概念EntityManager:EntityManager是JPA中用于增删改查的接口,它的作用相
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- [LeetCode] 2. Add Two Numbers 两个数字相加You are given two non-empty&n
- FrameLayout 在这个布局中,所有的子元素都不能被指定放置的位置,他们统统防御这块区域的左上角, 并且后面的子元素直接覆盖在前面的子
- 最近碰到这么个恶心的问题问题:有个arr文件被放到Module A中引用,现在Module B又依赖了Module A,则在编译过程中会发生