标签: java-heap

Java 堆转储:如何通过 1. io.netty.buffer.ByteBufUtil 2. byte[] 数组查找占用内存的对象/类

我发现我的一个spring boot项目的内存(RAM消耗)一天天增加。当我将 jar 文件上传到 AWS 服务器时,它占用了 582 MB 的 RAM(最大分配的 RAM 为 1500 MB),但每天,RAM 增加 50MB 到 100 MB,而今天 5 天后,占用了 835 MB . 现在该项目有 100-150 个用户,并且正常使用 Rest API。

由于 RAM 的增加,有几次应用程序出现以下错误(从日志中发现的错误):

Exception in thread "http-nio-3384-ClientPoller" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

所以为了解决这个问题,我发现通过使用 JAVA Heap Dump,我可以找到占用内存的对象/类。因此,通过Jmap在命令行中使用,我创建了一个堆转储并将其上传到Heap HeroEclipse Memory Analyzer Tool。在他们两个中,我发现了以下内容:

1.总浪费内存为:64.69MB (73%)(查看下面的截图)

在此处输入图片说明

2 . 其中,34.06MB 被Byte [] arrayLinkedHashmap[](检查下面的截图)占用,我从未在我的整个项目中使用过。我在我的项目中搜索了它,但没有找到。

在此处输入图片说明 3 . 以下 2 个大对象分别占用 32 MB 和 20 MB。

1. Java Static …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory heap-dump spring-boot java-heap

8
推荐指数
1
解决办法
182
查看次数

Java Xmx 和 Docker 容器 RAM 大小之间还有多少余量?

我 100% 了解 JVM 的陷阱以及在 JVM 世界中为了解容器的人体工程学/资源而取得的进步/进步。另外,是的,我知道 Java 在默认情况下会尝试分配它运行的环境中可用 RAM 的 1/4...

所以我有一些想法和问题。我制定了 50/50 规则。如果我的应用程序需要 1GB 的 Xmx,那么我创建了 2GB 的容器,它为 JVM 开销和任何容器/交换的东西提供了另外 1GB 的 RAM(虽然不确定交换在容器中是如何真正工作的)。

所以我在想,如果我的应用程序需要 6GB 的 Xmx,我真的需要创建 12GB 的容器还是可以使用 7GB 或 8GB 的​​容器?当涉及到 RAM 时,我们需要在容器内部留出多少空间?

java containers docker java-heap

5
推荐指数
1
解决办法
1259
查看次数

TreeMap<Long, Long> 集合粒度需要多少内存?

TreeMap<Long, Long>充满 1000 个(全部唯一)键值对的集合需要多少内存?

是的,我可以只观察内存转储,但需要详细了解原因:

  • Long= n 字节
  • Entry<Long, Long > = 2n 字节,因此 1000 个条目 = 2000n 字节
  • 树节点中的引用:k 字节,1 个节点有 2 个指向子节点的链接,因此 2k 字节,
  • ETC。

总计: X ?

java treemap java-memory-leaks java-heap

2
推荐指数
1
解决办法
253
查看次数

当 methd 返回 String 时,它是文字还是 String 对象?

假设一个方法返回一个字符串

String str = methodCall();

methodCall() 的返回类型是 String。

我们会得到一个字符串文字,它会在池内存中还是只是一个字符串对象?

java garbage-collection memory-management string-pool java-heap

0
推荐指数
1
解决办法
67
查看次数