随笔分类 - 杂记
摘要:魔鬼的梦魇—验证IE中的JS内存泄露(二) 闭包往往是需要为内存泄露负责的,因为使用它会很容易产生不为程序员所发现的循环引用。父函数的参数和局部变量将会一直被冻结、引用和持有,知道闭包本身被释放,这并不是显而易见的。事实上闭包已经变成如此普遍的变成策略,以至于开发人员经常的深陷问题之中,但是已存的我们可以依赖使用的资源却很少。我们来看看这个使用了闭包的循环引用图,它详细的描述了闭包及其造成的没存泄露的由来,并且指出了这些循环引用是如何形成的。 一般情况下的循环引用时由于两个特定的对象彼此持有对方的引用造成的,但是闭包却不一样。它不是直接引用,而是其通过引入父函数的作用域信息而产生的。正...
阅读全文
摘要:随着移动互联网的发展,现在越来越多的应用开始想bs方向转移,原来很多复杂的计算逻辑也自然随着转移到了客户端,需要客户端的javascript来担任实现的角色;原本不起眼的内存泄露,现在却犹如恶魔会很快的吞噬掉用户的内存。从去年开始就在专注js面向对象开发实现、托管代码垃圾回收算法、js内存泄露相关的东西;如果大家关注过这方面的东西,那我想你一定读过微软开发人员Justin Rogers撰写的那篇经典的内存泄露模式,其实道理阐述的很清楚,但是怎么证明和呈现泄露的存在呢?这是一直困扰我的一个难题!今天我们针对这篇文章的各个模式,记录一下自己的一些想法,很多是自己的推论,并不一定正确,欢迎大家批评.
阅读全文
摘要:垃圾回收器之标记擦除法 这一次我们来简单的了解一下标记擦除法(mark-and-sweep),标记擦除法是第一个被广泛使用的,并且可以解决循环引用问题的垃圾回收算法; 使用标记擦除法的时候,垃圾对象并不能立即被回收,相反垃圾的回收是等到内存不够使用的时候才触发;这个时候程序的执行流程将被暂时的休眠,一旦所有的垃圾回收后,才会唤醒正常的程序执行流程。 标记擦除法又被称为跟踪垃圾的回收器算法,因为它跟踪所有可以直接或者间接被程序访问的对象集合;这些可以被程序直接访问的对象,有局部变量和静态变量。在回收器中,这些变量被称为根对象。一个被其他对象字段引用的对象称为可被间接访问的对象。所以可以...
阅读全文
摘要:垃圾回收器算法之引用计数器法 微软将运行在公共语言运行时里的代码成为托管代码;但是从更广泛的意义上来说,只要语言提供了自动内存管理功能,我们使用其开发的代码都可以称为托管代码;自动内存管理即我们平时所说的垃圾回收器,垃圾回收器的实现是一个复杂的过程,其中涉及到很多的细节;垃圾回收器的难点并不是垃圾的回收过程,而是定位垃圾对象。当一个对象不再被引用的时候就可以被回收了,但是我们怎样才能知道其没有被引用呢? 算法定义 为每个对象增加一个字段记录被引用的次数,并由运行时跟踪和更新引用的总数; object p = new ComparableInt32(57); object q...
阅读全文
摘要:IntroductionThefirst version of this paper, written in 2003, had several shortcomings, not the least of which was that the techniques described were specific to Internet Explorer. I've updated and improved on the original, to document the current state of the art, especially in light of the exte
阅读全文
摘要:集合,没那么简单 好久都没有碰过前端页面的东西了,前几天做一个下拉列表的动态增删,是由js在前台操作select的option来实现的,但是奇怪的事,有的时候不能正确的清空列表的所有选项!本来觉得没有什么可以记的,但是细细咀嚼,还是有必要的! 先贴出我实现清空列表的代码//删除列表的所有选项functionclearListBox(listBox){for(vari=0;i<listBox.length;i++){removeListBoxOption(listBox,i);};};//删除给定列表的某个选项functionremoveListBoxOption(listBox,inde
阅读全文
摘要:偷懒也得怀揣个性--定制具有个性的VS代码模板 开始使用VS进行程序开发也快有两年的时间了,从开始对其一无所知,到现在的日常工作开发,我的生活已经离不开她了!虽然vs也同样具有臃肿的体态,但是无论是性能,还是应用性、用户化、扩展性等来说,其他的IDE都是无法相比的!vs内置了很多类型的项目模板和项目项模板,这些都极大的方便了我们的工作;但是我们日常开发中,不同的公司对代码开发会有一些不同的规范要求,比如版权声明,如果这些东西可以在新建项目和项目项的时候,自动的加上这些东西,那么就可以“偷懒”节约我们的时间;今天我们简单的介绍一下怎样定制代码模板; Vs代码模板简介 Vs为我们预置了很多的项目和
阅读全文
摘要:RoadMap,走出自己的特色主义 这几天上班交通特别拥挤,可能是因为各个学校陆续开学了吧。在这个金秋时节,很多经历了高考折磨的孩子挥手告别往日的苦难,兴高采烈的走进了自己或许是梦寐以求的象牙塔;对于很多人来说,这不仅仅是人生的一次新的起点,这也是人生的一次很大的转折点,当然了,我也不例外;所以这几天心里老是不能平静,觉得自己应该做点什么,来纪念这个特殊的日子!既然是起点,那么我们不妨先回首借鉴一下这些年得生活,最后对自己的职业生涯做出规划。 07年的秋天,那是我人生的一个重要的起点,重要不是因为发生了多么惊天动地的大事,是因为从那时候开始的一些事情,都在悄悄的改变着自己和自己的生活。当然这.
阅读全文
摘要:利用javascript的面向对象的特性实现限制试用期 Javascript是一种面向对象的脚本语言,其也具有面向对象的三大特性,但是今天我们不详细的讲解javascript的面向对象特性,今天我们简单的了解一下javascript的面向对象特性,然后学习一下怎样实现试用期的限制! 下边是我自己写的一个类,类中有字段、方法 //构造函数functionPerson(name,sex,age){this.name=name;this.sex=sex;this.age=age;};Person.prototype.getName=function(){returnthis.name;};Pers.
阅读全文
摘要:每个人眼中都有一个哈姆雷特 ---记我的根级别数据无效 一千个人眼中有一千个哈姆雷特!看到的是同样一个哈姆雷特,但每个人眼中都会有自己的哈姆雷特,所以平时我们开发中,很多时候即使抛出同样的异常,也往往可能是不同的原因导致的!当我们运用我们以往的经验没有解决这个问题时,那么我们还是老老实实、心平气和的慢慢查找、琢磨问题所在以及解决方法。 上周开发中遇到了著名的“Data at the root level is invalid. Line 1, position 1.” 代码大意 stringxml=st.Split('☎')[0];System.Xml.XmlDocumentd
阅读全文
摘要:使用Jasob混淆javascript代码 在平常的web开发中,我们时常需要写一些js的类库,当我们发布自己产品的时候,不得不把源代码分发出去;但是这样就会泄露自己的代码。今天使用了一下Jasob感觉不错; 使用Jasob,我们的JavaScript代码无法被任何人理解从而杜绝剽窃和泄密,别人再也不能在我们的代码上做点修改就成了他的作品了。使用Jasob混淆以后,JavaScript的代码大小将缩小为原来的30%,因此浏览器将用更短的时间下载并执行网页代码。 Jasob分析JavaScript的代码并替换掉描述性的变量和函数名称,例如客户、年薪、姓名等等换成没有意义的d、g、m等等,同时也.
阅读全文
摘要:主键思维定势导致的惨案 记录一下前段时间工作中遇到的问题,希望这血淋淋的惨案可以警醒与我有相同思维定势的网友。 众所周知一般情况下数据库中的记录是按照主键(主键是整数)递减排列的 select * fromPerson.Address 这种情况下我们直接使用top (100),自然会正确的返回前100条记录select top (100) * from Person.Address所以,我就一直自认为下面的嵌套子查询会返回前100条记录SELECT top (100) [AddressID] ,[AddressLine1] ,[AddressLine2] ,[City] ,[StateProv
阅读全文