相关疑难解决方法(0)

什么是脏私人记忆?

我正在64位Linux系统上开发一个应用程序.正如我所看到的,我的应用程序正在吃太多脏堆内存.谈论堆内存,"脏"是什么意思?是什么让它出现以及可以采取哪些措施来防止它出现?

编辑

我最好解释一下我的应用程序执行的操作.

我的应用程序运行在两个线程中:第一个线程将作业发送到队列,然后在另一个线程中执行.因此,第一个线程分配要排队的页面,第二个线程将它们出列,执行它们的作业并释放它们.所有这些操作都以线程安全的方式执行.

所以我对这个东西进行了测试,使它排队100000000个作业并执行它们.在特定时刻之前,内存使用量会增加.然后,当排队过程结束并且仅剩余出队时,内存使用莫名其妙地不会减少.最后,当所有作业都出列并执行时,释放所有内存.因此,内存泄漏似乎在出列过程中发生,因为当它完成所有内存被释放时,我发现它的代码没有任何错误.

我知道如果我在这里发布我的代码会更好,但它太大了.但是,根据我的补充,是否有人猜测可能导致这种情况的原因是什么?

linux heap memory-leaks memory-management

6
推荐指数
1
解决办法
5750
查看次数

什么"Private_Dirty"内存在smaps中意味着什么?

我有一个巨大的RAM消耗Java进程,我正试图弄清楚他正在做什么这些内存.所以,我正在对这个PID做一个pmap -x,这里是结果的一部分:

Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000001000       4       0       0 rw---    [ anon ]
0000000000400000      48       0       0 r-x--  java
000000000050b000       4       4       4 rw---  java
0000000003b9d000     264     224     212 rw---    [ anon ]
0000000003bdf000 2199556 1887992 1830160 rw---    [ anon ]
000000396c800000     112     108       0 r-x--  ld-2.5.so
000000396ca1c000       4       4       4 r----  ld-2.5.so
[...]
ffffffffff600000    8192       0       0 -----    [ anon ]
----------------  ------  ------  ------
total kB         7072968 4382820 4270104
Run Code Online (Sandbox Code Playgroud)

正如您在地址3BDF000上看到的那样,有一个2199556 KBytes和1830160 Dirty的映射.

在/ proc/10139/smaps中,可以看到更详细的信息:

03bdf000-89fe0000 …
Run Code Online (Sandbox Code Playgroud)

linux jvm memory-management

6
推荐指数
1
解决办法
8649
查看次数

标签 统计

linux ×2

memory-management ×2

heap ×1

jvm ×1

memory-leaks ×1