as3 强制内存回收

以前我们最熟悉的强制内存回收的方法是:
  1. function GC():void{
  2.                 try{
  3.                 (new LocalConnection).connect("foo");
  4.                 (new LocalConnection).connect("foo");}catch(e){
  5.                         trace(System.totalMemory);
  6.                         }
  7.                 }
复制代码
//由于上次试验弱引用的时候,发现当轮询本地sharedobject对象的时候,导致弱引用的内容进行了回收,于是联想用来进行强制内存回收..代码如下:
  1. package {
  2.         /**
  3.          * @author CYPL
  4.          * @date 2009-04-01
  5.          */
  6.         import flash.net.SharedObject;
  7.         import flash.system.System;
  8.         import flash.utils.clearInterval;
  9.         import flash.utils.setInterval;       

  10.         public class GCPlus {
  11.                 public static function clear(isTraceTM : Boolean = false) : void {
  12.                         var time : int = 2;
  13.                         var interval : int = setInterval(loop, 50);
  14.                         function loop() : void {
  15.                                 if(!(time--)) {
  16.                                         isTraceTM && trace(System.totalMemory);
  17.                                         clearInterval(interval);
  18.                                         return;
  19.                                 }
  20.                                 SharedObject.getLocal("cypl", "/");
  21.                         }
  22.                 }
  23.         }
  24. }
复制代码
//测试文档类:
  1. package {
  2.         import flash.display.MovieClip;
  3.         import flash.display.Sprite;
  4.         import flash.events.MouseEvent;
  5.         import flash.system.System;       

  6.         /**
  7.          * @author CYPL
  8.          */
  9.         public class GC_Test extends Sprite {
  10.                 private static const NUM : int = 1000;
  11.                 private var num : int;

  12.                 public function GC_Test() {
  13.                         init();
  14.                 }

  15.                 private function init() : void {
  16.                         num = NUM;
  17.                         stage.addEventListener(MouseEvent.CLICK, clickHandler);
  18.                         while (num--) {
  19.                                 var mc : MovieClip = new MovieClip;
  20.                                 mc.graphics.beginFill(0);
  21.                                 mc.graphics.drawRect(0, 0, 100, 100);
  22.                                 mc.x = Math.random() * 500;
  23.                                 mc.y = Math.random() * 400;
  24.                                 addChild(mc);
  25.                         }
  26.                        
  27.                         trace(System.totalMemory);
  28.                 }

  29.                 private function clickHandler(e : MouseEvent) : void {
  30.                         clear();
  31.                 }

  32.                 private function clear() : void {
  33.                         while (numChildren) {
  34.                                 removeChildAt(0);
  35.                         }
  36.                         GCPlus.clear(true);
  37.                 }
  38.                 /*function GC():void{//这是我们熟悉的方法
  39.                 try{
  40.                 (new LocalConnection).connect("foo");
  41.                 (new LocalConnection).connect("foo");}catch(e){
  42.                         trace(System.totalMemory);
  43.                         }
  44.                 }*/
  45.         }
  46. }
复制代码
通过System.totalMemory的结果可以清楚的看到内存得以释放, window任务管理器也能够看到有变化哦,原理也可能和异常有点关系.

补充下:也许大家试验其他的异常方法,在IDE调试下也能看到内存释放,但是独立的swf测试的时候,会看到任务管理器中内存并没有得到释放. 目前也只发现传统的LC方法和我上面提到的SO的方法能独立测试也能够达到释放的效果,假如还有新的可能,大伙都来补充下咯~
在Python中,并没有直接设置进程最大内存使用量的内置方法。Python运行时的内存管理主要依赖于操作系统和Python的内存分配机制。但是,你可以通过一些间接的方法来控制或者监控Python进程的内存使用,比如使用操作系统级别的工具或者第三方库来限制内存使用。 例如,在Linux系统中,可以使用`ulimit`命令来限制进程可以使用的最大内存: ```bash ulimit -v <number_of_kilobytes> ``` 这会设置当前Shell会话及其启动的所有进程的最大虚拟内存为指定的数值(单位为KB)。但是请注意,`ulimit`设置是针对用户的,并且这个设置并不是所有的操作系统都支持,而且通常只对C程序有效。 对于Python程序,一个更加灵活的方法是使用`resource`模块(在Unix-like系统中可用),可以通过它来设置资源限制: ```python import resource soft, hard = resource.getrlimit(resource.RLIMIT_AS) resource.setrlimit(resource.RLIMIT_AS, (限制值, hard)) ``` 上述代码中的`RLIMIT_AS`是进程的最大虚拟内存地址空间限制(单位为字节)。`soft`是软限制,`hard`是硬限制,硬限制设置了软限制能设置的最大值。 另外,你还可以使用第三方库如`memory_profiler`来监控Python脚本的内存使用情况: ```bash pip install memory_profiler ``` 然后使用`@profile`装饰器来监控特定函数的内存使用,或者使用`mprof`命令来监控整个脚本的内存使用情况。 需要注意的是,这些方法并不会强制限制Python程序使用的内存量,而是监控和控制程序尝试使用的内存量,实际上Python的内存使用是由垃圾回收和对象生命周期管理决定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值