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, 从而不能重整内存.
> 反者道之动,弱者道之用- 隐藏被引用文字 -
>
> - 显示引用的文字 -