OS 内存管理相关的两个问题

16 views
Skip to first unread message

redsea

unread,
Oct 12, 2007, 12:05:26 AM10/12/07
to TopLanguage
我以前零碎看过的东西, 有问题请指正:

1. 当前大部分 GC 都是 OS swapping 不友好的.
gc 没有和 os 结合, 当 OS 内存不足, 将一段时间未用的, gc 管理的内存 swap out, 了一段时间按, gc 要进
行回收, 要进行内存扫描, 又要 swap in, 内存颠簸; 如果为了swap in, 选择swap out 的内存, 是gc 暂时还没有
扫到的内存, 这就更搞笑了.

如果一个服务器上跑 java 程序, 没有限制最大内存使用量, 申请了大量的内存, 其中有不少内存已经很久不访问了(gabage) ,
此时又碰到 OS 或者其他程序要求申请内存, 这种情况应该会发生吧 ?

目前似乎有一个 gc 算法, 是bookmark算法, 和 os 结合之后, 可以解决这个问题.

2. 操作系统的内存管理也有碎片问题.
虽然操作系统的逻辑内存页面可以用物理上不相邻的内存页面构造, 但是如果物理页面都很零碎的话, 当 OS 需要大块一些的连续物理内存做
硬盘 DMA 的时候, 就会无法申请到了.

OO 语言在内存申请, 释放调用比过程话语言多很多, 如果一个长期运行的OO程序, 频繁申请释放内存, 长短周期对象交错申请释放, 又
不带自己的内存管理模块, 这么一个程序长久运行下去, 即使程序本身逻辑没有错, 也会带来问题, 不但自己需要的大内存块可能申请不到, 甚至可能
牵连到 OS 性能下降, 甚至出现可靠性问题.

可以重整内存的 gc 可以避免这个问题.

不能重整内存的 gc 无法提供帮助, 而且, 如果因为有 gc, 不再写自己的内存管理程序, 那就跑到最糟糕的情况去了.

C++ 0x 的 gc 出来之后, 多半是保守 gc, 从而不能重整内存.

李扬

unread,
Oct 12, 2007, 12:45:16 AM10/12/07
to pon...@googlegroups.com
受教了。

在07-10-12,redsea <red...@gmail.com> 写道:

Huafeng Mo

unread,
Oct 12, 2007, 1:01:27 AM10/12/07
to pon...@googlegroups.com
不要把小命交给gc

在07-10-12,redsea <red...@gmail.com> 写道:



--
反者道之动,弱者道之用

SevenCat

unread,
Oct 14, 2007, 12:43:40 PM10/14/07
to TopLanguage
既然GC了,那对性能要求并不会非常高了。

> 反者道之动,弱者道之用- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Reply all
Reply to author
Forward
0 new messages