python GC 与java GC机制对比表格
python GC | java GC | |
---|---|---|
包含算法 | 引用计数;标记清除;分代收集 | 引用计数;标记清除;分代收集 |
核心算法 | 引用计数 | 分代收集&标记清除 |
触发机制 | 显示调用gc.collect(); 当前threshold超过闸值 | 显示调用system.gc();使用jvm规划内存超过闸值; |
GC触发后是否立即回收 | 是 | 否 |
GC是否导致stop the world | 否 | 是 |
算法说明
引用计数:当指向对象指针增加,引用计数+1;反之-1
标记清除:为解决循环引用不能很好的回收内存的问题。从root节点遍历,标记所有可以访问的变量,释放达到不了的变量/对象/内存
分代收集:创建的对象未被GC扫描回收过的新生代,经过GC多次回收仍存活下来会被标记为次生代/二代、老年代/三代。以不同频率进行扫描、内存回收
特性执行相关语句
python GC相关语句:
gc.disable() : gc关闭
gc.collect() : gc启动
java GC相关语句:
system.gc() : 启动GC