Profiel van 家恒和你在一起WeblogLijstenGastenboek Extra Help

家恒 彭

谢谢所有路过的朋友:)
Een ogenblik geduld...
De reactie die je hebt ingevoerd is te lang. Maak hem iets korter.
Je hebt niets ingevoerd. Probeer het opnieuw.
We kunnen je reactie nu niet toevoegen. Probeer het later opnieuw.
Je hebt toestemming van je ouders nodig om een reactie toe te voegen Toestemming vragen
Je kunt geen reacties geven omdat je ouders dit hebben uitgeschakeld.
We kunnen je reactie nu niet verwijderen. Probeer het later opnieuw.
Je hebt het maximale aantal reacties overschreden dat je elke dag kunt versturen. Probeer het over 24 uur nog eens.
De mogelijkheid om reacties te geven is uitgeschakeld voor je account omdat onze systemen aangeven dat je spam naar andere gebruikers verzendt. Als je van mening bent dat je account ten onrechte is uitgeschakeld, kun je contact opnemen met de klantondersteuning van Windows Live.
Voer de beveiligingscontrole hieronder uit om een reactie achter te laten.
De tekens die je typt moeten overeenkomen met die in de afbeelding of het audiofragment.
家恒 彭zegt:
IBM面试归来,谢谢大家的支持~~
10 Juni

和你在一起

为天地立心,为生民立命,为往圣继绝学,为万世开太平
27 april

定制不同用途的Firefox

用了很久的FireFox,装了几十个插件,导致启动慢、占用内存又大,其实很多插件的用途不一样,不用每次都把所有插件加载进来的。

查了下,FireFox果然还提供这种功能,而且更好的是,这个方法可以把你的FireFox配置备份,以后再安装的时候,直接导入就可以了,嘿嘿~

很简单:firefox.exe  -profile %配置数据的文件夹路径%

说白了启动ff的时候加个参数,再跟个文件夹路径就可以了,这个文件夹路径如果是空的,那么ff起来的时候就是一个原始的ff。你可以往里面装插件了,所有东西最后都放在这个文件夹下面了,以后带着走就OK啦。

用的时候自己需要再建几个快捷方式,一个对应一个profile。

我一般开发一个,看网页用一个。

21 april

终于不堪忍受缓慢的系统

    把Word换成了WPS。Word 2007真不知怎么说他好,功能确实不错,但是实在实在太慢了….

    把Outlook换成了Foxmail。做为一个发邮件的,Outlook实在不怎么样。慢….

    把默认浏览器换成了Chrome。FireFox很好很强大,但是装的插件太多了,而且太耗内存了….

    Google的简洁确实做的很好。

Blog还是要继续

不写不写连思考的时间都减少了,计划重拾这份热情!!!

27 juli

[翻译]面向对象重用详解

早就翻译的了,忘了发上来,文章很不错。

原文在这:http://www.ddj.com/architect/184415594?cid=Ambysoft

 

为了获得面向对象重用的好处,你必须懂得各类的面向对象重用手法,并且要知道在哪里以及如何运用它们。

可重用性是面向对象技术的一大特点。然而遗憾的是,这个特性往往不容易应用于实践中。原因是,重用也并不是免费的,并不是说你使用一些面向对象开发工具就可以简单达到的。相反,你必须付出很大的努力才能达到较好的重用。第一个要面对的问题是,应该是重用而不是仅仅是代码重用。代码重用是重用技术中效率最低的一种方式。这里不要误解我的意思,代码重用还是一种好的方法,但是有可能对你的其他地方的重用造成一些隐患。我们是在开发应用程序,而不仅仅是写代码,所以你应该更多的考虑重用而不是代码重用。下面,让我们详细地看看各类的重用技术,看看当你在开发应用程序的时候,什么地方你可以使用它们。

代码重用

代码重用为最常见的一种重用方式,可能是同一个应用程序中一些部分源代码的重用,也可能不同应用程序中重用。在最好的情况下,可以通过共享一些类或者一些功能块或程序段(C++中可行,Smarttalk和Java不不行)来达到代码重用。在最坏的情况下,可以通过复制,然后修改代码来达到代码重用。在业界,一种可悲的现状是,代码复制为开发者使用的唯一的一种代码重用方式。

代码重用的一个关键点是,你已经弄清楚了源代码。需要的话,你可以自己修改来重用,或者让别人帮你修改。这样有好有坏。通过阅读代码,虽然这样做常常比较慢,但是你可以决定是否使用它。但是,另一方面,由于整个代码都给你了,而代码的最初编写者可能没有很好地编写一些文档,这样则可能增加你理解代码的时间,结果减少代码重用带来的好处。

代码重用最主要的好处是可以减少你实际需要编写的代码量,从而间接减少了开发和维护的成本。缺点是代码重用的效果仅仅局限于开发,而且它常常会增加应用程序的耦合性。

继承重用

继承重用意味着在你的应用程序中使用继承,从而可以直接使用一些已经存在的类实现好的行为。继承是面向对象的基本概念,它可以让你对“is a”,"is like","is kind of"等概念进行建模。例如,为了开发一个“ CheckingAccount”的类,你可以让它继承自" SavingsAccount",然后直接重用后者实现的所有行为。

继承重用的好处是你可以直接使用先前开发好的行为,这样能同时减少开发和维护的成本。但是,很遗憾,继承重用存在一些缺点。第一,继承的错误使用常常会导致开发者无法进行模块重用,而模块重用可以提供更高层面的重用。第二,初级开发者往往会忽视对继承的回归测试(在一个子类中运行父类的测试用例),从而导致脆弱的类继承体系,最终难以维护以及增强。如你所见,这也是重用,但是应该避免。

模板重用

模板重用为文档重用的一种形式。它一般指组织内部一些重要的文档、模型、源代码的共同格式或风格。例如,组织内部很常见的一些共用的模板,如用例、状态报告、开发进度安排、变更报告、需求、类文件以及方法注释等。文档模板的主要优点是可以增加文档的一致性和质量,而缺点是开发可能根据自己的想法修改模板,但是修改后没有与项目成员说明。

使用模板的最好效果是,你可以让开发者非常简单的使用他们。我见过一些模板的实现, 简单的如Mirosoft的Word文档的模板,复杂的如Lotus Notes,带有一个可以被所有开发者共享的数据库。你的组织也必须提供一些培训,以便组织内的每个人都能正确地知道在何时如何使用何种模板。

组件重用

组件重用指在你的应用程序开发过程中使用先前已经构建、而且完全封装好的组件。组件一般是自成体系的,并且仅封装了一个完整概念。与代码重用不用,组件重用无需你去看源代码;而与继承重用不同,组件重用无需你使用子类。Java Bean和ActiveX为比较常见的组件。

组件重用有几个优点。第一,组件重用比代码重用或继承重用提供更广泛的可重用性。因为组件是自成体系的,所以使用时你仅需插入他们,然后他们即可工作。第二,一些通用平台(如Win32操作系统,Java虚拟机)的广泛使用开辟了一个巨大的组件市场,第三方的计算机厂家可以自己开发并且以一个比较低的价格销售这些组件。组件重用的缺点是,组件一般比较小而同时封装了一个完整的概念,所以往往需要大量的与他相关的开发包。

用户接口是使用组件的最简单的方式,如状态栏、图形化组件、图形化按钮等。但是别忘了,除了用户接口外对一个应用程序来说还有很多其他方式。你可以获取一个封装了操作系统网络能力的组件,或者一个封装了持久层能力的组件(如与关系数据库交换的组件)。如果你想构建自己的组件,那么确保他们仅仅只做一件事情。例如,一个用于编辑信件地址的组件就具有很好的重用性,因为你可以很多需要编辑邮件地址的场合。而一个可以用于编辑信件地址、E-Mail地址和电话号码的组件则不是很好重用,因为没有多少场合同时需要这三个特性。相反,最好是构建三个这样可重用的组件,在需要的地方挨个使用即可。当一个组件只封装了一个概念的时候,它是一个内聚的组件。

框架重用

框架重用是指使用一系列已经实现好的、与某项技术或商业领域相关的、提供基础功能的类。开发者以框架为基础开始构建他们自己的应用程序。在此过程中,80%的通用基础框架已经构建好了,你只需增加与你应用相关的20%即可。实现了GUI基础组件的框架是一个很常见的例子。有各式各样的框架应用不用的领域,如保险业、人力资源、制造业、银行业、电子商务。框架重用是一种领域层面的高级重用技术。

框架提供了对问题域的一个基本解决方式,并且封装了一些比较复杂的逻辑,而这些逻辑的开发可能需要花费数年的时间。然而很不幸,框架重用需面对一些不足。复杂的框架难于掌控,对部分开发者来说,需要一个较长的学习时间。框架往往是与平台相关的,这样会使得你的应用与某个计算机厂商绑定,从而增加应用的风险。虽然框架实现了你需要的80%的逻辑,但是它们往往是最简单的那80%;而比较困难的那部分,比如商业逻辑或者对你组织而已需要特殊处理的逻辑,则还需要你自己来实现。框架之间通常不能同时工作,除非他们是来自同一个计算机厂商或者是协会的。他们往往需要你改变自己的应用来适应框架的变化,而不说使用其他方式。

现有重用

现有重用是指使用先前已经开发好的一些东西,如用例、标准文档、领域模型、流程、纲要和一些可以让你的新项目尽快开始的参考项目。现有重用有几种不同的级别,有完全的重用,如:你可以完全把现有的项目作为你的新项目或者把它使用到新项目中,也有很少重用,如,你可以看看以前的项目,获得一些想法标准文档,如编码标准和用户接口标准是一些很好的现有的东西,可以作为一些模型文档和方法指导文档在项目之间重用。我们也能够通过一般数据接口或者通过使用面向对象的方式进行包装来重用现有项目。

现有重用强调项目之间的一致性以及减少对每个新项目管理上负担。另一个好处是,你可以买到一些现有的东西或者在网上找到这类东西,如:用户接口标准(大部分平台都有),主流语言的编码标准,面向对象方法来的标准,建模符号的标准(早就出现很多年了)。现有重用的最大缺点是,它常常被一些顽固不化的程序员认为过度使用了,因为你仅仅是把一些标准和流程从一张桌子搬到另一个。总之,现有重用非常重要而它是一种需要长时间积累的技术,不应该忽略它。

模式重用

模式重用是指重用一些公开的、文档化的的方法来解决一些常见问题。模式一般由单个类图来描述,通常有一到五个类。使用模式重用,你不是重用代码,而是重用这些代码背后的思想。模式是一种很高层面的重用,而且有很长的生存期——至少超过你正在使用的计算机语言,而且有可能超过面向对象语义本身。

接触点模式( The Contact Point ),从我的书(Building Object Applications That Work)修改而来,使用了UML(统一建模语言)类图进行建模,展示了一种能够跟踪你的组织与其他商业组织之间的接触点的通用模式。这个模式说明你可以把E-Mail地址、通信地址、电话号码等看做同一类东西,可以称之为对象接触点,通过这些接触点,你的组织可以与其他商业组织(如:客户、员工、供应商等)进行交互。这个模式增加了你应用程序的可扩展性。举例说,你不仅可以邮寄一份发票给客户,同样也可以使用E-Mail或者传真给客户;无需邮寄一个光盘或录像带到某个通信地址,你可以以电子的方式传送这类产品。接触点模式是以上这类事情成为可能的关键一环。我已经在机构应用中成功的使用了此分析模式,并且重用了这个模型最困难的部分——模式背后的思想。模式重用是一种高层面的重用,你可以跨越多种语言和平台来实现这种重用。模式封装了开发中最重要的一个方面——解决问题的方法。模式增加了系统的可维护性,并且通过使用被广大经验丰富的面向对象开发者所认可的解决问题的通用方式,来增强你的应用程序。模式重用的缺点是,模式无法提供即时的解决——你必须编写代码来实现模式。

领域组件重用

领域组件重用是指对大型的、可重用的商业组件的识别以及开发。一个领域组件是能提供一组内聚的功能的相关领域和商业类的集合。例如,一个电信公司的组件图上有几个领域组件,每个封装了很多类。服务提供组件封装了100多个类,从处理长途电话的类,到有线电视的,到互联网服务的都有。在你的组织中,一个新项目一般通过架构驱动的建模过程来识别出各个领域组件,然后在开发过程中进行修改和增强。

领域组件能够提供最强的可重用性,因为领域组件封装了大规模的、内聚的商业行为,而这些商业行为可以应用到很多应用程序中。你在针对某一领域进行开发的所以东西,都应该考虑重用。领域组件是高效的架构级工具,他对商业行为进行了很好的封装以便日后重用。

对于以上这些重用方法,一个好消息是你能同时使用他们。没错,框架重用往往把你限定在某些框架或者一些标准或者一些指导方针中。但是,你同样可以和框架重用一起使用其他重用。现有重用和组件重用是两种开发新项目最简单的方式;通过一点研究,你很快就会发现可以重用的东西。

你可以在网上买一个文档模板,但是如果你的组织内部没有很好订阅开发过程的话,你可能无法享受模板带来的好处。继承重用和模式重用是建模者需要掌握的,他们会发现,应用这类重用是必修的一课。

从实践角度说,我一般会使用现有重用和组件重用来训练我的建模人员,然后让他们适当的使用继承重用和模式重用;使用架构驱动的开发方式来识别和开发领域组件;至于开发人员,我很信任他们,他们可以使用任何他们能用的重用方式。

从类的角度看待重用

现在,我们已经有了一些重用的工具,下面让我们看看如何应用他们。四层的类架构说明了在每一层如何使用重用。因为每一层有它自己独特的属性和开发要求,所以在每一层也应该使用适当的重用方法。让我们来看看每层的具体情况。

用户接口层封装了屏幕和报表等,一些用户用于与你的应用程序交互的东西。对于用户接口层,最常见的重用方式显然为界面的组件重用。开发者常常会购买一些开发包,如:滚动条、图表、列表和其他一些界面组件。现有重用对这层也很重要,例如,一些特有的用户接口或者报表格式标准的重用。在设计用户界面时,最重要的事情是一致性,而在你的应用程序中遵循一定的标准和指导原则是实现一致性的最简单的方式。

业务层封装了你的应用程序需要解决的问题的处理逻辑。模式重用,特别是分析模式重用,对业务层而言很重要。同样,对业务层而言,框架重用以及一类基本业务类包的使用,也很重要。虽然这三种重用方式还相当地不成熟,但是他们正在很多商业领域中快速地发展。大量的模式正在从学校和企业中诞生,而一些基础框架正在被大型的咨询和技术公司创造,这些公司往往在一个或多垂直领域拥有领先水平。

然而,对于你的组织而言,更重要的是引入领域组件的重用。领域组件是以架构驱动、以重用为目的开发的一个重要副产品。

持久层封装并且抽象了你用于长期存储对象的不同持久化机制,例如:关系数据库、对象数据库或一般的文件方式。对这一层而言,最重要的重用方式为框架重用和组件重用。这是因为你能够购买完整实现的或者部分实现的持久层的包。使用设计模式重用的可能性也很大,因为对持久层的设计方式已经有一些公开的出版物了。同时,组织内部的数据字典的现有重用也是有可能的。

系统层封装和抽象了对操作系统的操作,如网络、硬件和其他一些应用。设计模式的重用,尤其对硬件和应用的封装,对系统层而且很常见,对一些包装类的组件重用和现有重用也很常见。

在这所有四层中,代码重用和继承重用显然都是适合的。当然,你也可以说在用户接口层也可以使用模式重用。在整个项目中,对标准文档、开发文档的格式和流程的模板重用,具有重要意义。

成功使用重用的秘诀

你如何才能真正地达到面向对象的重用呢?我想你所需要做的,就是走出去,买一些工具或者存储库来存储的你的可重用的东西作为一个开始。当然了,重用不仅仅只是工具。事实上,很多组织的重用失败就是因为太注意了工具,而不是流程。这里是一些重用的建议:

    当一个东西被不同的组、使用在不同的项目至少三次以上后,你才能称它为可重用的。你可以在设计的适合就考虑重用,但是只有当此应用的某些部分被使用了三次以上时,你才能说这个重用是成功的。

    可重用的东西必须有很好文档,同时还要有一个或几个展示如何使用它们的实际例子。同时,文档还应该说明什么时候适合用它,什么时候不应该用,以便开发者能知道它使用的场合。

   把重用应用于实际的唯一方法是你时刻在为重用做准备。你必须划出一些必要的时间和资源,来确保你的工作可以重用。如果你不回顾并且花一些时间来总结一下你的工作的话,你是不可能做到重用的。因为项目的压力总在促使你把这些事情放到一边。底线是,重用的管理(明确地重用一些东西、持续地增加一些可能重用的东西到重用库中)是否是你工作的一部分,如果不是,则无需考虑。

   重用是一种态度。当你开始一个项目时,你需要考虑的第一件事情就是你是否可以在应用中的某些部分重用其他项目的一些东西。可能其他人已经把你需要的东西做好了,可能你可以购买到一些组件或者可重用的东西。另一方面,你必须乐意与其他人分享你的工作成果,这样他们就能重用你的东西了。一个优秀的项目领导者,必须时常地去发现一些可以重用的机会,去促进重用,并且最终使得他的队伍从中受益。在开发的各个阶段寻找重用,是实现重用的一个很好的方式:在建模阶段,寻找继承重用和模式重用;在编码阶段,寻找组件重用和代码重用。

经常地,你可能不得不与“非创造者”(NIH)症状做斗争。这个问题会阻止你在你的团队中传播重用的思想。对于NIH症状,开发者会拒绝重用其他开发者的东西,因为这个东西不是由他们自己开发的。 Pure hogwash,一名专业开发者,时常在其他项目中寻找一些他可以重用的东西,因为这样可以让他们在开发自己的应用某些部分时,免去一些领域相关的工作。我的经验是,比较专业的开发着往往乐意使用其他开发者的工作成果,当然,这些工作必须是高质量的、有很好文档的、并且简单易懂的。NIH症状是虚构的,如果是真的,那么面向对象开发环境就不会有这么多类包了,当然,也用不着数百家公司出卖可重用的组件和框架了。

语言上的沟通往往是人们发现重用的一个方式。不错,重用库中放了很多好东西,但是,它跟你组织内部其他一些官方的束缚差不多。你可以通过官方渠道或者通过非正式的网络渠道获取重用库中的东西,当然,你也可以从朋友那里获取。

重用是一个组织的事情,而不是一个项目的事情。很多组织因为不知道重用的范围而导致重用失败。项目之间的重用能使你从重用中受益,不要仅在单个项目中重用。很多组织因为在第一个项目中无法达到重用而过早地放弃了重用,其实这是很愚蠢的,因为刚开始的时候,你确实没有什么可重用的东西。这也是使用架构驱动开发的一个重要原因,因为它往往能看到比一个单独项目更长远的东西,这些东西能满足整个组织的需要,并且对于那些重要的需求,在任何地方都应该考虑重用的规划。

那种在任何地方都适用的重用是不实际的。有很多种方式可以实现重用,不同的层次上有不同需求需要不同的重用方式的组合。你必须知道并且根据情况做合理的计划。

至于“不用重新发明轮子”这个说法,首先你需要知道的是,你手上有不止一个轮子供你使用。你可以重用源代码、组件、现有的开发需要的东西、模式和模板。但是更重要的是,你需要知道,你的工作是不可重用的,因为它是面向对象的。相反,你需要花时间在上面,让他们可以重用。

有些东西叫做经典

 

    这两天陪小雁看新版的射雕(胡歌版)。说实话,看射雕很难不让人和83版的对比一下。这版的感觉还是可以的,至少黄蓉演的很有灵气,但是差83版仍然很远。83版就是太经典了,演员的选取、演技堪称完美,每一个角色都造就了一个经典,还有音乐,以至于这二十几年来金庸的其他小说拍了N遍了,但是敢拍射雕的,确是不多。这样的经典还有很多,红楼梦是、西游记也是、星爷早期哪些电影也是(这几年的,不是说不好,但是也就是昙花一现)......还有仙剑,呵呵,造就了一个时代啊。

    经典的东西不会随时间的改变而改变。虽然随着技术的改变,表现力丰富多了,但是造就经典的确是一种朴实。就像今天去看几百上千年前的唐诗宋词古文,短短几个字确实意味深长。射雕啊,就是一种情结,呵呵,一句“活,你背着我;死,你背着我”,留下了一段传奇的爱情。

29 juni

富人的奥运会

    听说北京宾馆奥运期间的标间翻了10倍还订不上;

    听说鸟巢附近租房子从2000涨到了6000;

    听说北京的学校暑假不为本科生提供住宿;

    听说北京很多工程7月份开始停工,好让民工们回家;

    听说最近老有警察在查暂住证;

 离自己最近的一次奥运,怎么感觉确如此遥远呢?

80年代

146350

 

    下午经过西直门那块,商场正在搞一个“80年代”的主题活动,不由感慨万分。80年代已是二十年前的事情了。小人书、铁环、变形金刚......一切是那么熟悉又那么遥远,或许这就所谓的人生吧,一天天过去,我们留下只是一抹熟悉的味道...

半年了

  过年了。。。

  答辩了。。。

  租房了。。。

  散伙了。。。

  毕业了。。。

  工作了。。。

  在一起了:)

  下一步,开始养家糊口了,哈。消失了的半年,回来啦。

12 januari

两年整

    又是一年的1月。。。

    今天突然想起来好像写Blog已经差不多两年了,查了一下,哈哈,果然,第一篇是两年前的今天的写——2006年1月12日。感叹一下,时间过的真是快啊!!!

    算了算,这两年间总共写了135篇blog,呵呵,平均一个星期一篇了。不过,这段时间有些懈怠,等想后面写点啥,争取把缺了的补上~

    网络真是一种神奇的东西啊,似乎可以游离于时间之外。如果一直写下去,多年以后再来看,会是一种怎样的心情呢?

31 december

写在07年的最后一天

    好久没写blog了。一来,前段时间比较忙;二来,最近的日子过得有点混沌,没头没脑的;三来,似乎好久没学什么东西了,这可不好。就着这特别的日子,整理一下吧。

    两个字形容一下2007年——惨淡

    惨字给家里。这一年发生了一些令人伤心的事情,而且不止一件,有些时候真为家里捏一把汗...更遗憾的是自己确远在北京,不能与家里人一起承担。该来的是总会来的,将来还会有,这也是没办法的事情,只希望家里人都能顺利过去,一切平安!

    淡字给自己。真是平淡的一年...工作平淡、找工作也平淡、学习上也挺平淡、生活也是,这可不像我。年末,反省了一段时间,发现自己一些问题,其实这些问题早就知道,只是没意识到影响会这么大。给自己一点希望,没有解决不了的问题!

    说到2008,给人一种希望的力量。生活的巧克力,明年会是哪一颗呢?

19 september

你的信念有多坚定?

最近看到的一个小故事:

 

如果你已经为人父母,当你的孩子正在学习走路时,你会给他几次机会?

你会在他跌倒十次之後,让他改坐轮椅吗?

还是只给他二十次学走的机会,若学不会走路就要他放弃?

或者当你身边有五十个人叫嚣着劝你放弃,你就决定让他坐轮椅呢?

我想你的答案是: 不会。

的确,当我问每一位父母,会给你的孩子几次机会呢?

他们都说:

我会给他无数次机会,直到他站起来,学会走路为止!

是的,一直坚持到底者,最终都会站起来。

 

      你会给自己的孩子无数次机会,因为你坚信他无论如何都是可以站起来的,这是一种毫无怀疑的信念。问题在这了,当自己碰到困难、碰到问题时,你会给自己多少次机会呢?一次、两次……

    一个简单的道理,如果你认定你无论如何都要成功的话,那么失败只是暂时的,因为你最终都会成功。问题是——你对成功的信念有多坚定呢?很喜欢《阿甘正传》,一种简单的执着,想不成功都难。

    呵呵,我的信念有多坚定呢???我也不知道,不过我会一直记住这句话:没有失败,只有暂停的成功。

10 september

点名游戏

既然被点中了,还是得好好答答

 

1.你认为分手后的男女朋友还能做普通朋友吗?

看情况了吧。不过更偏向于可以。 

 

2.最近经常挂念的人是谁?

小雁,父母

 

3.你最希望从朋友(不包括爱人)那里得到的是什么?

支持,帮助

 

4.最近最郁闷的事?

郁闷的事情多了。。。参考前面的blog

 

5.最受不了自己的哪个缺点?

急躁。不是一般的急,唉,碰到事情就睡不着的那种。

 

6.遇到喜欢的人,你是勇敢表白还是默默关注?(老套了点~)

默默关注。当然,单是关注是不够的,机会成熟了就要行动。

 

7.说出点你名的人的3个优点

1,认真。虽然你说你粗心把,不过我觉得还是很认真了。
2,可爱。确实可爱,不如也不叫ff了,哈
3,乐于助人。赞一个~ 好mm。
4,再加一条。就冲你“相夫教子”这点,就得算个好mm了。

8.最想珍惜的人/事是什么?

最想珍惜的人:眼前人。不能说是想,就应该去做。很多人,过去了或许就再也碰不到了,不珍惜现在还能珍惜什么呢?

最想珍惜的事:跟小雁一起去青岛、泰山的那次,呵呵。

 

9.最近有什么好看的韩剧不?

强烈鄙视韩剧!!!!强烈鄙视TVB!!!!
俺们是看美剧的。

 

10.爱人和被人爱,哪一种更幸福?

都幸福。

 

11.说出点你名的人的三个缺点或不足? 

1. ms不怎么会唱歌,呵呵;

2. ms跳舞也不是太好,不过现在有大有进步;

3. 八卦,还是八卦;

 

12.你现在最想拥有的是什么?

两个人在一起啊,呵呵 

 

13.你有多少存款,打算用来干吗?

学费还没交呢。。。打算么,等有钱在说了 

 

14.你有对别的异性心动么?在有男|女友的时候

没有。(谁问的bt问题。。。) 

 

15.如果有一次回到从前或未来的机会, 你希望是什么时候?

没想过啊。。。

 

16你的梦想是什么?

环球旅行。

 

17.自己的三个最主要的优点?

乐观, 自信(也算个缺点,有时候过了。。),乐于助人

 

18.最近有没有在看书(不是学习的书,是休闲娱乐的书,像是小说啊,杂志啊等),看什么书呢?为什么选择这本书? (去掉此问题,觉得实在无聊)

   此题替换为QIQI版的问题:

最近EB有没有什么八卦新闻呀?(这个对我来说比较有意义!呵呵)

八卦女。。。

 

19.最想去的是哪个国家,为什么

加拿大。看着他的国旗就很有吸引力。

 

20. 你最喜欢吃的一道菜是什么?简单描述一下

我妈做的清汤牛肉。每次回家都吃

 

看来我们班的都被点光了。点点其他的吧,老朱勇,就你了:)

02 september

Who am I ——《异次元骇客》(《The 13th Floor》)

    《黑客帝国》很多人都看过,但是估计看上面这部片子的人没多少。不过,我要说《黑客帝国》的灵感很有可能是来源这部片子。
    本片没有《黑客帝国》那么多的动作,但是确更让人感觉到一种恐惧,一直对真相的恐惧。试想一下,如果有一天,你发现你与你正在玩的一个游戏中的角色一样,正被外界一种更强大的力量所操作时,你会是一种怎样的心情呢?

    再试想一下,有谁能证明我们这个世界不是外界的一个玩物呢?正像一个游戏,如果里面的角色有思想的话,他又会如何思考呢?

    呵呵,有些时候,自己会突然有这种想法——我是谁?
    想一想,茫茫宇宙、无数星球,人是何其渺小,然而,如此渺小的存在,为什么会是“我”呢?
    再想一下,为什么诺大一个地球,“我”不是其他人呢?
    为什么我会出现在“我”的身体里而“我”不会出现在其他人的身体里呢?
   “我”是从什么时候开始意识到“我”的存在呢?
   “我”从哪儿来,当我死后,“我”又会到哪儿去呢?
    为什么“我”会存在呢?
   “我”是怎样的一种存在呢?

    呵呵,比较傻瓜的问题。但是这些东西总会时不时的出现在脑海中。茫茫宇宙、芸芸众生,“我”到底是谁呢?

Bourne的终结——《谍影重重3》(《The Bourne Ultimatum》)

  

    要论今年看过最精彩的电影,还得算这部。好久没有看到过这样酣畅淋漓、一气呵成的片子了。最难得的是,即便已经是第三部了,但片子很好的保持了上两部的节奏,给三部曲画上一个完美的句号。又是一部经典,呵呵。

    与007、谍中谍相比,Bourne没有任何高科技的的东西,也没有邦女郎,有的只是一种潜在的素质。一言一行、一举一动,你从这些细节中感觉到一种力量,没有任何花哨的东西。我想这也是这部影片吸引人的一个地方。

    影片最出彩的还是导演对“节奏”的把握。给人一种欲罢不能的感觉。我想不可能有人会在看这部片的时候感觉到困吧,呵呵。这种一气呵成让人感觉无比舒畅。还有,影片的镜头也是一样的有“节奏”,你基本上找不着静止的场面,大部分镜头都是在运动中完成的。从这样的镜头,你能感觉到一直速度、一直飘忽、一直神秘,呵呵,很符合一名杀手的风格。

27 augustus

人品问题

    最近特倒霉,诸事不顺啊...找不到原因,只能暂且怀疑一下是rp问题了。

  1. 上星期在公司下bt,一个不小心忘关了,结果第二天被抓。通报批评+罚100块钱......
  2. 也上周,测试需要装个软件。在其他人机器上装的好好的,到我机器上装上了,死活运行不了,ft.......
  3. 最惨的周末去考托业,简直是背到极点了。
          周末下雨,打车去考试的,结果那出租车停哪儿不好,偏停天桥底下。下车的时候只顾看着脚底下的水了,还是跳出去的,结果一头撞在天桥的斜坡上,眼冒金星外加一大包,本来还挺困,撞一下,成迷糊带晕了。
          倒霉的还在后头。去到考场,开始贴照片,打开书包一找——懵了...准考证哪儿去了???一直记得是放包里了,可是偏偏确没在了。好吧,还有二十分钟,打印一张还行。然后开始在北大里找上网的地方,跑了一圈,死活找不到。绝望中回到考场,打听了一下,还好,原来可以办个临时的,分分钟搞定,差五分钟进到考场,一场虚惊......
          惊魂未定,就开始考听力了。100题听力,没听多少,冷汗下来了——我涂的题号怎么跟读的题号对不上啊???靠,又懵了...迷糊中过了十来道题,总算缓过这口气来,只是这十几道题啊,唉...后来发现有一道题涂重了,两题涂一个上了,ft...
         考试结束,收东西走人,又懵了——我的伞哪儿去了???唉,八成办准考证的时候仍哪个屋忘了...唉,这试考的,无语了...

    仔细想想,今年的运气一直怎么样,谁知道呢,去年的本命年过的好好的,呵呵。算了,过去的就不说了,急需振作一下!!!马上该找工作了,希望倒霉到此为止。

16 augustus

[转]上帝的即时信息

转自:http://chn.blogbeta.com/296.html

     又是一篇关于上帝的,感觉自己越来越喜欢这类东西了。真不知是不是应该找本圣经来看看,呵呵。生活总是充满不解、迷惑与未知,每次看到这类东西总能给自己带来一丝清凉与宁静。

 

原文地址:Instant Message from God

译文地址:上帝的即时信息

翻译:wuxuanalsk


上帝:你好,你是不是呼叫我?

我:呼叫你?没有啊,你是谁?

上帝:我是上帝。我听到你的祷告,你希望我们能聊一下。

我:是啊,我确实在祷告——这能让我心情舒服一点。但我现在确实很忙,我正在处理某件事情。

上帝:你究竟在忙些什么?蚂蚁也跟你一样忙碌。

我:我也不知道自己在忙什么?我就是找不到一点空闲时间。生活变得如此匆忙,每一分每一秒都显得那么急促。

上帝:是的。做事情只能让你变得忙碌,效率才能让你获得结果。做事情花费时间,而效率却能帮你节省时间。

我:这我都懂,可我就是摸不着头绪。顺便提一下,我并不希望你用即时信息不断地干扰我的工作。

上帝:我觉得有必要向你阐明一些事情以帮助你摆脱跟时间无休止的斗争。在这个网络时代,我选择了让你觉得舒适的沟通方式来跟你交流。

我:好吧。那你能告诉我么,为什么现在生活变得如此复杂?

上帝:停止分析生活吧,你只需生活在其中,是分析让你把生活变得如此复杂。

我:为什么我们经常不开心?

上帝:你的今天是你昨天担心的明天。你经常忧心忡忡,因为你不能停止分析生活,担心已经成为你的习惯,你为此不开心。

我:那怎样才能不担心,毕竟生活中有这么多不确定性。

上帝:不确定性是无法避免的,但是我们可以选择是否去担心它。

我:虽然是这样,但是不确定性会给我们带来很多痛苦。

上帝:痛苦是不可避免的,但我们可以选择是否去承受它。

我:既然承受痛苦可以成为一种选择,那为什么优秀的人总是选择去承受痛苦?

上帝:真金不怕火炼。优秀的人总是历经考验,但这并不意味着你因此必须承受痛苦。因为有了这些磨练,他们的生活应该变得更好,而不是更痛苦。

我:你的意思是说这些经历有价值?

上帝:是的。在日常生活中,经历是一个严厉的老师。她总是先给你考验然后再告诉你人生的道理。

我:可是我们为什么必须经受这些考验?为什么我不能远离这些烦人的问题?

上帝:问题总是有针对性地设置障碍,但是它能为你提供有益的经验。它能提升你的精神,提升你从奋斗和忍耐中获得的内在力量,这些都不是你远离问题能够获得的。

我:恕我直言,深陷在问题的泥淖中,我们常不知道该往哪里走。

上帝:如果往外看,你将不会知道你该往哪里走,那就看看你的内心吧。往外看,你只会无止境地梦想着能得到什么;往内心里看,你才能有所顿悟。眼睛让你看到景象,心灵让你富有远见卓识。

我:有时候不能够较快获得成功比朝正确方向前进更让我们受伤,我应该怎样做?

上帝:成功是别人定义的,满不满意却由自己内心决定。知道前方的道路比盲目往前冲更让人舒服和满意。你带着指南针工作,让别人带着时钟工作吧。

我:在艰难的时期,怎样才能保持激情?

上帝:经常回头看看你已经走了多远而不是整天忧心你还要走多远;经常庆幸你正在获得的而不是懊悔你正在失去的。

我:人们有哪些事情让你感到惊讶?

上帝:当承受失败和痛苦时,他们问:“为什么是我?”当他们获得成功时,他们从不问:“为什么是我?”每个人都希望真理站在他们一边,却没有人想站在真理的一边。

我:有时候我问自己是谁,为什么会在这里?我百思不得其解。

上帝:不要试图找出你是谁,而是确定你要成为谁;不要试图回答你为什么会在这里,而是确立你的目标。生活不是一个寻找的过程而是一个创造的过程。

我:我怎样才能获得最好的生活?

上帝:不带悔意地面对你的过去;充满自信地把握你的现在;毫不畏惧地迎接你的未来。

我:最后一个问题。有时候我觉得我的祷告都没有得到答复。

上帝:恩,其实所有的祷告都有答复,有时候答案可能就是一个简单的“不”字。

我:很感谢能跟你这么愉快地聊天。

上帝:不客气。记住:坚持你的信仰,扔掉你的恐惧。不要相信你所怀疑的但怀疑你所相信的。生活是一个谜语而不是有待解决的问题。相信我,生活是很美好的,前提是你必须知道怎样生活。

13 augustus

白绿蓝

周末公司活动去河北涞源,好久没出去走走了,刚好。周六早晨走的,周日回来,爬了个山、看了回草原,玩得还挺累的。美中不足就是其中一半时间都花在坐车上了。。。呵呵,不过还好了,不用对着电脑就好。帖几张图吧,留个纪念~

一米阳光

 

 

云海之间

 

 

Windows桌面???

 

一望无际

 

众山小

 

绵延的羊群

04 augustus

[强烈推荐][转载]深思:清华学生在香港求学受到的心灵震撼

    一篇好文。直指中国教育的病根。文章提到的一些想法自己也思考过,只是没有文中说的这么透彻。很多东西只是自己一些模糊的想法,看到文章豁然开朗。总结一下,文章说了几个东西:

  1. 国内是一种功利教育,而国外是一种人格教育。国外没法说,不过国内我想大家都深有体会。人生的最初十多二十年,基本上都是在跟分数打交道,不能不说是一种悲哀。
  2. 文中的结论:I am who I am。简单说,就是成全你自己,做你自己想做的,成为你自己想成为的。兴趣是最好的老师,而国内的教育偏偏打压兴趣而强调“全面”,结果就是很多人并不知道自己喜欢什么、在做着自己并不愿意做的事情。
  3. 结合上面两点,也就不难解释整个社会的一种功利与浮躁。教育尚且如何,更何况其他呢。。。
  4. 文中很大的篇幅说到了圣经。个人对宗教、信仰这类东西一直都不是很了解(不信它但也不排斥)。但是看文章以后,发现以前之所以不理解,更大的原因是没有经历过一些东西,无法体会其中的道理。现在好了,文中说的正好是我所熟悉的,突然发现信仰这种东西并不像以前所想象的(呵呵,负面教育受的太多了)。信仰啊,无论你信与否,它都就在那,当你感觉无助的时候不妨看一看,有些东西或许能够释然。

    文章有点长,大家需要耐心看看,呵呵。过去的二十多年我们无法选择,但是将来的几十年我们可以做我们自己的选择,如何选择呢?问问自己的心很多同学、朋友都在找工作,呵呵,谨以此文共勉,祝大家都能找到那片属于自己的天地!

 

 

http://club.chinaren.com/105403342.html

98年本科毕业,又顺利地被保研,当时的我只是一个憨憨的书呆子,纯洁的如同高中生,在清华这种和尚庙一般的理工学校里呆了四年,女孩似乎是山下的老虎,神秘得让我一见就脸红心跳。未来是什么对于我就是“读完研再说”,反正成绩还行,不读白不读。天上掉了馅饼,用我的兄弟的话来说。香港正好回归一周年,教育部要选派一批本科毕业生去香港科技大学读研,以加强两地的教育和科研交流。清华当然要占不少名额,系里的几个牛人去了美国,所以这个饼就掉到了我头上,确实是个不错的饼,不用考G、考托、全额奖学金,连什么手续都是学校和教育部包办了,我分文不花,后来香港科大的联络人抱怨中国的办事效率和程序烦琐,至于怎样的麻烦过程,我至今都一无所知。


香港科大


就这么糊里糊涂地来到了香港。依山傍海的科技大学美得如同世外桃源,现代感的建筑更让我们爽眼。当时的一个哥们说:“妈的,就是用银子在荒山野岭堆出来的,这样的物质条件算是让我满足了。”后来得知就是亚洲最美丽校园,倒也丝毫不怀疑。据说是香港政府感到了贸易和服务的优势正受中国沿海城市的挑战,而科技就是竞争力,就下了狠心投钱建了这学校,请来了学者。耗资400亿港币,相当于微软公司一年的纯利。组织的参观,教授的讲话,英语的培训很快就过去了,当时的新奇兴奋也褪得干净,每天面对这青山海景,最后也麻木得没有感觉了。由此可以推测娶一个漂亮老婆是没有多大意义的,如果不是为了炫耀。教授大多是华人,台湾和大陆出身的不少,反倒香港人是少数派,很多都是在北美的名校里拿了PhD,奔这里的高薪来了,他们的PhD头衔总要和名字相片挂一起,挂一辈子,Harvard和Standford之类的当然就香了。正教授可以一年拿到一百多万港币,也就是一个月可以买小汽车,比一般的美国大学高。知识真的值钱了,让我们充满了对未来的向往。有回和教授们吃饭,谈及大陆大学教授的待遇,他们就感慨:“知识分子真被廉价到了可耻的地步。”我们也无话可说,反正不是我的错。然而钱不是好拿的,很多教师正是三十出头,教授职称还未到手,和学校只是几年合同,其他的学者也不断在申请进来,所以压力颇大,辛勤程度比公司打工仔有过之而无不及。既然自己做学问要紧,培养学生的事就要往后排了。刚近来时很多教师和我们亲切讲话,之后就不见了,好久不见就不认得。研究生当然有导师的,只要自己不去找他,他是肯定不会找我的。上课之后就是绝对的自由,当时自由得很是惬意。


萧伯纳说人生的苦闷有二,一是欲望没有被满足,二是它得到了满足。这话的确是部分的真理。当我住在这绝世美丽的地方,可以随心所欲的去商店买东西不用担心付不起帐,可以任意的支配自己时间时,最初的半年里,却发现情绪每况愈下。西方化的建筑设计将个人的所谓 privacy保护发挥到极致,进了宿舍就基本感觉不到他人的存在,同单元的人也有独立的卧室,大家都是进了房,将门一关,隔离了,谁也不好意思去敲门。刚来时认识的一伙人,后来发现根本遇不着,如同消失了一般。同住一起的是三十好几的叔叔级人物,偶尔可以说上一两句话,却永无可能说很多。大家都像是住在不同的空间里做研究,忙碌的无瑕顾及他人。


平心而论,对于一个成熟的研究者,如果他有确定的目标和兴趣,对生活人生都不再有不切实际的幻想,准备投身科学研究中,那么这里真是一个好环境。但是我种茫茫睁着无知的眼睛的毛头小子,却是完全另外的感觉。那种茫然的苦闷感觉真是难以描述,找不到人玩,只是将窗户开了又关,关了又开,不停的喝水,仍然感觉不舒服。怀念在清华的破楼里相互串门打闹的日子,怀念抱着篮球在走廊里叫一声就应者云集的日子,可是怀念解决不了问题。以孩子的心理去进入成熟严谨的环境,不可不说是一次考验。


多年的功利教育的辛勤培养,我一路顺当地走过来,发现完全的上当。我在成功的通过了一次次考后,最终都不知道我为什么要通过这些占距人生的考试,这个所谓的优秀学生只是在不停地让自己去符合那个“优秀”的外在标准来麻痹自己的虚荣心,而自己,那个真正的自己却一直没有存在过,没有发育过。我学的任何课程都无法帮我解决当时的苦恼,那么每天学那些微分方程又是为了什么?还去为了父母的微笑,人们的赞许吗?年年得奖学金的清华毕业生是了这么一个怪物:不知道自己要什么,也不知道生活是什么,对社会毫无接触,二十出头,可是见女孩子就一身不自在,会解各式各样的方程,却不能解决自己的困惑,硕士博士的路就在眼前,可是不知道还应不应该这样走下去,这状态难道就是我的追求?一个智商还不错的人努力多年就变成这样?这是一个问题,很早就有了,只不过太晚地暴露出来,我相信这样的问题依然将被很多师弟师妹们面临,我相信在清华依旧有很多像我当年一样的学生。当看到他们天真的讨论: G 2***, 托 6**,GPA 3.*, 学校名次Top **, 仿佛几年的辛劳就只为那么点数字,人生的终极标就是 go abroad. 我无法不为他们忧虑。这也是促使我写这篇文章的主要原因。


很多人没有对做研究的真正兴趣,但是用尽了精力去获得一个去国外做科学研究的机会,就洋溢在掩饰不住的喜悦里,甚至对人生毫无真正规划,对自己的兴趣一无所知,为出国而出国,那将在告别父老乡亲后去迎接苦闷的开端。香港的学生很实际,决大多数本科毕业就去赚钱,三十之间为结婚买房奋斗,如果告诉一个香港人说你二十八了还在读博士,他会觉得你很失败,可能是根本不会赚钱。而留下来读博士的香港学生,就是真的很喜欢作研究的人,扎实地做事,他们的认真让我们一批朝三暮四,心猿意马的大陆学生汗颜。


生活在香港


都说香港是弹丸之地,其实一千多平方公里的面积也不算小,不过大多是山,可利用的地方不多,很多商业区都是添海造出来的。亚热带的气候,又在到处是山和海湾的地方,风景当然好。香港的气候比北京舒适一万倍,冬天冷不了,夏天也不太热,甚至没有明显的四季感。只是上半年天气有些潮。成天都有湿湿的感觉,北方人有点受不了。香港的交通极其发达,公共车从不拥挤,也很少堵车,可是香港的道路比北京的窄得多,车也不会少,布局和管理更好而已,看来北京走向国际化还须努力。这里是名符其实的购物天堂,东西也不算贵,电器和服装可能比北京便宜,特别是国际名牌,由于没有关税,肯定要比大陆便宜。所以不必带很多衣服来,足够便宜了。但是服务业,比如吃饭,理发,涉及到员工劳动和地租的就要比大陆贵好几倍。可以随便往来深圳也是在香港的一大好处,一天可以轻松来回好几次,在香港读书的学生可一得到香港的临时身份证,加上护照上盖个章,就可以自由出入境了。


常有人问及香港的影视明星,可是到了香港就觉得那些人也只是打工仔,背后是更有影响力的老板,一旦老板不想捧了,明星就会很快消失,新人会取而代之。看到他们卖力地载歌载舞,其实也是生存需要,在商业社会里那是绝对的驱动力。香港的金融和资讯服务相当发达,在所谓第一世界里也算相当突出,可以很便宜的享受到信用卡,电讯,互联网服务,因此有些人在香港呆久了再回来反而不适应了,主要就是这些方面,当然还有其他制度等软件原因。
说到学校的生活,物质条件比国内任何大学好,甚至条件好过美国不少学校,香港的学生很少住宿学校,所以一到周末放假学校就很冷清。通常大陆学生独享学校设备,偌大电脑房和运动场,舒服的游泳池,都有不少美好回忆。学生宿舍条件不错,可以作饭,自己作比在餐厅里吃来的便宜,所以大陆学生会乐此不疲,周末常三五成群,作吃的为乐。餐厅里中西餐都有,中餐以广东口味为主,忙起来时以营养为重,口味不对也只能将就吃了。


现在在香港的大陆学生不算多,总共有四五百人,各个学校都有学生联谊会,是比较松散的组织,也有一些机会认识朋友。周末会组织放放电影,搞舞会。临近考试或论文时,谁也没心思搞活动。香港的学生很好打交道,在成熟的社会里长大的人,心理相对简单且好玩,不像一些大陆学生常常过分盘算自己的明天,将自己逼的很累。他们对大陆也渐渐感兴趣,虽然他们常常不知道湖南和四川,只说得上秦始皇和毛泽东。只要主动点和他们交流,是可以结识不少朋友的,粤语不是障碍,很多人可以听普通话,而且,广东话不难学,不留神就长进不少。


关于工作机会


很多人就终于跳到北美去了,大多还是接着读书,从这个意义上讲,香港只是跳板。在香港留下工作的机会不多,如果在进香港的第一天了解这一点,是有好处的。也有回祖国的,我就是,所以我在这里写文章了,看到很多朋友询问去香港读书的问题,作为过来人,就写了这些,如果能给这些朋友提供一点有益的信息,就很满足了。


上次写了文章发表在海外学子版,很多朋友给我回信,给了我很大的鼓励,真的没想到过自己的东西会给别人带来影响。留学的经历给了我很多,几乎是一个脱胎换骨的过程,在一篇文章里是不可能都讲完的,所以我再写一个续集,好莱坞搞续集纯是为赚钱,我呢是什么都不图,万一有 ppmm看了之后找我,最爽不过。将心底里的一点点“龌龊” 都暴露出来,可以痛快讲了。


凡事都是虚空


来自发展中国家的人,难免在神情上都多一丝生存紧张,中国在海外的留学生尤其让人感觉到这一点。看不到出自内心的笑,连谈话时也似乎只有一个主题:今后有什么打算?每做一件事,都在问自己:对我有没有好处?
坦白的说我自己刚到香港时就是这样,只觉得自己多么没着落,无根无底的飘在他乡,我要努力啊,绝不可浪费自己的任何精力,房子,车子,名誉,地位,还有漂亮老婆,我什么都要啊。要学最能给我带来利益的东西,去做最有利自己的事情,直到我成功。

当时我就是这么典型功利,到现在我都想这样痛骂自己。


数学指出函数的极大值往往在最不稳定的点取到,人追求极端就会失去内心的平衡,到时候就不难体会到数学原理的深刻。我很快让我的功利心理逼到无路可走了,对所学的东西怀疑,担心自己变成书呆子,对自己有信心,找不到真正的朋友,找不到让身心平静的乐趣,每天都在心潮起伏。最后我去找学生辅导员。愚蠢的诉说倒不多提了,不过我记得他大胡子的脸有了微笑,眼睛里放出宽容而温和的光。他告诉我觉的我很有意思,他第一次遇到这么坦白的学生。“那些东西有什么意义呢,你怀疑得很好。“之后就翻出圣经来,给我读某些章。


Everything is meaningless.竟是圣经里的话语。那是我看到的最为震惊的一句话,也是我后来觉得最深刻的一句话。中国人很难理解,对在功利教育里熏陶过来,缺少人格教育的中国学生,更无异于晴天霹雳。成绩,offer, 学位,这样那样的好处,每天拼命算计的东西有什么意义?假设你突然死掉,世界将会怎样?世界将一样绚丽,地球转的一样快,太阳系每天在宇宙中换一个位置。大海还是大海,波涛还是波涛,一样的花开花落,潮起潮落。你的亲人可能会掉眼泪,但是周围的人在三个月内将你忘个干净,那是你曾经那么在乎他们怎么看你的一群人啊。如果上帝存在,在他的眼里,你是多么可怜的小虫子,在活着的短暂岁月里,在最美好的青春里,都不曾快乐过,用尽心力去聚集一大堆外在和心灵没有关系的小东西,只是出于对未来的没有信心,小小的心灵在接近熄灭的一天还在发出那个愚蠢的声音,让你忙碌,让你忧虑的声音:我要,我还要。天底下充满了这样的小虫子,当一个离开了,又有一个来了,做着同样的事情,汹涌着同样的小小念头,受着同样的煎熬。于是上帝要感慨了:虚空的虚空,凡事都是虚空。已有的事,后必再有;已行的事,后必再行。日光之下,并无新事。


已过的时世代,无人纪念;将来的世代,后来的人也不纪念。
     ------圣经 旧约 传道书


我不是在传教,当时的辅导员也不是在传教,但是让我立刻看到自身的渺小,物质追求的虚妄,内心的愚昧。看看资本主义的学生辅导,是不是比我们这边高明多了?马哲曾帮助过我们什么?


不要忧虑“不要为明天忧虑,天上的飞鸟,不耕种也不收获,上天尚且要养活它,田野里的百合花,从不忧虑它能不能开花,是不是可以开得和其它一样美,但是它就自然的开花了,开得比所罗门皇冠上的珍珠还美。你呢,忧虑什么呢?人比飞鸟和百合花贵重多了,上帝会弃你不顾吗?”


一个朋友告诉我,他在等美国offer 的时候,常常梦到接到牛校offer, 过度兴奋到醒,更为郁郁,感慨 “但愿长醉不复醒”。这样的故事大家听了不会太惊诧,由此不难理解《儒林外史》中的进中举了。而得到offer的人到了海外,往往要经历更多的梦醒时分。


为什么活得这么累?生命本是如此美丽,连飞鸟和野花都可以尽情地享受上天的恩赐,而这些有高等思维的聪明人,却活活让思维搞得神情郁郁,哀声叹气。


常有人感叹西方人笑起来那么真实,那么出自内心,探讨起来,又归结到他们更有钱,他们的社会更发达。可我觉得那不是原因。原因就是他们比中国学生更接近飞鸟和野花罢了,更接近《阿甘正传》里的弱智罢了。他们更天真,相信那个万能的上帝会永不遗弃他,所以他们可以少想很多的问题,反而过得更顺利,在团队里表现得更凝聚,因为过分的私心是无法向大家共同的上帝交代的,他们可以很快做出一个Microsoft,一个Dell,但是大家可以看看中国的北大方正,联想,新浪,管理层一年的地震比台湾还多, 这么多年来,连冲出亚洲的野心都没有真正实现过。这难道不是上帝给西方人带来的好处,耶稣说信我就可以得救,不管这个上帝是不是虚拟的,但他在事实上填补了人性的巨大空白,人家的Microsoft 就证明了他的存在,正如计算机的虚拟内存,尽管虚拟,但事实上的作用是巨大的。中国学生总是怀疑这个看不见的上帝是否存在,更在私下里说,他对我能带来好处吗?其实中国人什么都不信,只信好处,从古时的考八股起,读书就是为了好处。因此,大家每天活在害怕没有好处的忧郁里,想靠自己小小的思维,在着巨大的世界系统里去谋取好处,上帝忍了泪水,背过脸去。思维的无奈我并不主张虚无,尽管我在上一篇文章里尽力去指出物质追求的虚妄。


正如萨特认为,人生本是本无意义,但是怎样摆脱虚无却是有意义的。王朔的意义在于砸碎那些没有意义的假崇高,伍迪.艾伦的意义就在于不断指出人生的荒谬。如果一切都是那么可笑,我们怎样面对每天的24小时?但是活着就是这么简单,它只是一个过程,简单而自然地发生,以至于任何干扰和关注都是多余。就像飞鸟掠过天空,野花静静地开放。能把什么东西叫做现在吗?你能占有什么东西吗?一切的意义只在时间的流动的河中。就像一团火,哪个燃烧的过程才叫火,一旦过程停止了,火不存在了。人的思维在作怪,它是一个双面的东西,它不总是带给我们好处,虽然我们对它有那么多自信。思维在很多时候严重地干扰了那个自然的生命过程,它在想单个的状态好不好,值不值得,合不合规范,能给自己带来什么,所以我们很快变得不快乐,不安稳,再也无法享受那种自然的喜悦了,正像被摄像的人,他的表情立刻不自然起来。恐怖片里的鬼魂可能一直不曾出现,人们却开始牙齿打颤,是被自己思维折磨而已。学计算机的朋友肯定知道操作系统将一个进程悬挂起来的意思。人的那个蠢笨不堪的思维,凭什么要常驻内存?它那么长期的运转,又真正解决了多少问题?为什么不在必要的时候悬挂它,去享受生命的自然?明白这一点将改变你的生活,思维会使你陷入矛盾,很多时候它是多余的,用心去体会,甚至用毛孔去感受就足够了。当你不再判断,不再分辨,不再比较,不再权衡,你就立刻、和谐起来。“采菊东篱下,悠然见南山”。那时,还用考虑什么呢?“此间有真意,欲辩已忘言”,连言语都是多余,因为言语来自思维。佛陀的捻花一笑,详和的神情,虽静坐,似乎已飞跃世间一切,他坐在了那个生命的根本之上, 再也没有一丝的不和谐。


读书的时候,我常常到海边听滔声,坐下来看着太阳落下,那会是我一天最美好的时间,当太阳没下去,晚霞渐渐褪去颜色,波浪依然轻轻拍打岸边,幕色从四周将我围过来,静默中我会在心灵里升起喜悦,感觉到冥冥中那个永恒的力量,它在紧紧将我抱住,天地万物和我一样同在,也被温和地抱着,我将永不孤独,永不伤心,永不绝望,因为那力量就一直在那里,将永远在那里,我是它的恩赐,我的灵魂从未像那时一样枝繁叶茂,内心从未像那时一样宁静和谐。我不用去分辨那种力量,是上帝也好,上天也好,老子说的道也好,有什么关系呢?分辨只是是思维常干的蠢事罢了。所有的心灵都是一样的,所以我相信所有人都有那个和谐的状态,就像收音机有那个频道一样,只不过太多人没有调到过。太阳,大海,清风明月,鸟语花香,生生不息的物种,是多么大的恩赐啊,只在我们断暂的生命里才可以感受到,可是太多的人从不念及。他们将自己全部地交给了少得可怜的脑细胞,心灵交给了那个拙劣的 CPU, 时时刻刻在做狭窄不堪的运算和判断,所以才会长时间挣扎焦虑,只看到85分和90分的区别, 5000元月薪和10万年薪的不同,牛校和烂校的分辨。所以“郁闷”,“无耻”,“倒霉”,“不爽”,“急”,这样的词汇就开始在嘴边泛滥了,就像破电脑的出错提示一样多。


本没有打算再写很多了,关于人生的刨根问底本来就是沉重的课题,无异让学业繁多的学子们再怀疑自己,平添忧虑。倒不如多说点逗乐的事,每天多嘻嘻哈哈一阵。前不久见到北大的一个女生,说我前面介绍香港的文字很实用,后面的文章就越来越看不懂了,可以理解,并不是所有的人都要像我一样想这些问题的,特别是女孩,一天多说几声“挺好的”“好温馨哟”就算过得不错了,古今中外都不曾出过一个女哲学家。但是,这位未曾谋面的北大师弟在等我的续集,谢谢你, xmdl(阿扁鱼), 我不愿让你失望这一篇是为你而写的。


我们看的人文书前面提到的女生就问我,在留学过程中最大的收获是什么,我回答是长了见识。就像在小地方呆久的人出来见了大海,这个收获大得很。所以我渐渐地学会了真正的谦虚态度,越来越承认自己所可以理解到的,可以认识到的只是这世界的太小一部分。在我的脑力范围外有太大的空间,从这一点来看,我们每个人都对自己有过多的自负,每天都在或多或少的干着作井观天的蠢事,争论着盲人摸象的争论。


清华北大的学生的人文素养,我想,很多来源于图书馆的人文书籍,因为喜欢读书的学生多半在那里搬书回来看。可是那些书多产于七十,八十年代,基本上是被一把姓马的刀阉割了的太监式的书,我不怕得罪人。怎么阉割法?举个例子,“总体而言,宗教是唯 心的,错误的世界观,被统治 阶 级利用来麻痹被统治 阶级的广大人民...”从此,你知道了这一点,你么读释迦,读耶稣,读老庄,都觉得如同太监一般阴阳怪气。在红色的年代里,马刀所向无敌,包括孔夫子到孙中山,从曾国 藩到蒋介 石,都少有可以逃脱的,因为他们有“阶 级局限性”。


但是我到了香港,就看到了很多台湾的书,很多香港的书,原来这些书本不象太监的,甚至不比姓马的书少阳刚之气,可以读得让人忘食,哎,可怜它们的被阉。这些都是我以前脑子以外的东西,所以我立刻知道要谦虚了,人总是受着他的经历和环境的巨大局限,他甚至不意思到,没有选择地被限制隔离着。


耶稣呢,用我们的眼光看,他太失败了,没有妻子,没有儿子,没有房子,没有财产,没有地位,最后还要被钉死,他只是游走于四方去救助受苦受难的人们,他有余的眼光总是看到了世界的外面,因为他也到过更高的维度里。
庄子至今看来还是活得最浪漫最洒脱的中国人,他是超脱的同义词,他也是高维空间的蚂蚁。


去读他们,去体会那种来自另外一个维度的智慧的震撼,尽管你可能无法改变无奈的现实,但是可以深刻地改变自己,尽管无法摆脱沉重的肉身,依旧无选择地活在平面上,但是,心灵获得了自由。愿意升起你的心灵吗?


每个人都是独一无二的,而且我们永远只能是自己,卢梭说的,对于整个世界我微不足道,但是我对于自己确是全部。事实上我们只对于自己重要,如果我死掉了,没有几个人会在三年后保持对我的记忆,如果我痛苦,没有几个人会有真正的同情,因为太难了,每个人都无法了解我的意识。所以我们要独立,活着就是成为自己,那个独一无二的自己,去寻找自内在的完美与和谐,去实现句那没有选择的话:I am who I am。Simply because I am not and can not be anyone else.可是我们受教育,教育的目的就是教我们忘掉自己,去变成一个称为标准的人,不是这样吗?从小学起我们就要评三好,树标兵,学雷锋,学赖宁。老师总是看到我们的恶习,“你那样子不合行为规范,不可耻吗?”
到了大学,我们又自由了多少呢?我们依旧看别人,看典型,看所谓成功者,我们依旧活在要忘掉自己的标准包围中,去bbs看看,似乎所有人都统一了口吻,GRE 2400,拿了牛校offer, 签了著名外企,找到了ppmm, 牛啊,羡慕啊,爽啊, 历史走到了21世纪,北大和清华人只剩下一副面孔了,每年招了很多新生,最后就剩下了一个。


比较是有意义的吗?作为一个独一无二的存在,作为自己的全部主宰,为什么要什么都和人家比才可以找到意义?为什么当别人考G的时候,我也一定要考,为什么考不过2200就要郁?为什么billgates 成功的时候,我也一定要学计算机?可是自己和别人是多么的不同,些不同难道可以在一些欲念的驱动下轻易的忽略?


崇拜是有意义的吗?明星是需要那样追捧的吗?中国的那支烂球队是需要那么多关注的吗?


当我们倾注希望的时候,他们借此赚到了更多的银子,活得更加嚣张,更加让我们失望,我们是在给富翁们献爱心,爱心那么多,为什么不献给需要爱心的更多的人们,为什么不献给自己,独一无二的自己?


当我们崇拜自己,热爱自己,追捧自己,关注自己,我们就都也是明星了。这样盲从将无法发生,起哄将无法发生,个人崇拜将无法发生。这个意义大的很,至少大跃进将不发生,文革将不发生,我们的经济有可能早三十年走上正轨,现在我们不需要拼命飞跃重洋,中央到地方的官员就不要象现在一样,在亿万人没有工作时还竭力吹嘘7%的GDP增长,就像阳痿的人,为了脸面,郑重地去声名:请看我浓密的胡须,年增长率7%

02 augustus

我的天堂

    回家就象去到了天堂。

    抛开所有事情,没有任何烦恼,也没有什么需要去思考的,呵呵,吃吃睡睡。

    很感激父母啊,挡掉了所以的事情,我呢,饿了吃,困了睡,这样的生活,真是太奢侈了。

    两天了,还没适应过来,唉......

18 juli

哇哈哈,回家了~

    哈哈,下午就走了,月底回来。祝大家假期愉快:)

16 juli

JVM调优总结

最近总结的一些东西,基本上是网上一些资料的汇总。

 

一、相关概念


基本回收算法

  1. 引用计数(Reference Counting)
    比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。
  2. 标记-清除(Mark-Sweep)
    此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。
  3. 复制(Copying)
    此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不过出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。
  4. 标记-整理(Mark-Compact)
    此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。
  5. 增量收集(Incremental Collecting)
    实施垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。
  6. 分代(Generational Collecting)
    基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的。

分代垃圾回收详述


如上图所示,为Java堆中的各代分布。

  1. Young(年轻代)
    年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来 对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。
  2. Tenured(年老代)
    年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。
  3. Perm(持久代)
    用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=<N>进行设置。

GC类型
GC有两种类型:Scavenge GC和Full GC
  1. Scavenge GC
    一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。
  2. Full GC
    对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:
    • Tenured被写满
    • Perm域被写满
    • System.gc()被显示调用
    • 上一次GC之后Heap的各域分配策略动态变化


分代垃圾回收过程演示




二、垃圾回收器


目前的收集器主要有三种:串行收集器、并行收集器、并发收集器

  1. 串行收集器

    使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC打开。
  2. 并行收集器
    1. 对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理器机器上使用。使用-XX:+UseParallelGC.打开。并行收集器在J2SE5.0第六6更新上引入,在Java SE6.0中进行了增强--可以堆年老代进行并行收集。如果年老代不使用并发收集的话,是使用单线程进行垃圾回收,因此会制约扩展能力。使用-XX:+UseParallelOldGC打开。
    2. 使用-XX:ParallelGCThreads=<N>设置并行垃圾回收的线程数。此值可以设置与机器处理器数量相等
    3. 此收集器可以进行如下配置:
      • 最大垃圾回收暂停:指定垃圾回收时的最长暂停时间,通过-XX:MaxGCPauseMillis=<N>指定。<N>为毫秒.如果指定了此值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值。设定此值可能会减少应用的吞吐量。
      • 吞吐量:吞吐量为垃圾回收时间与非垃圾回收时间的比值,通过-XX:GCTimeRatio=<N>来设定,公式为1/(1+N)。例如,-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收。默认情况为99,即1%的时间用于垃圾回收。
  3. 并发收集器
    可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中、大规模应用。使用-XX:+UseConcMarkSweepGC打开。
    1. 并发收集器主要减少年老代的暂停时间,他在应用不停止的情况下使用独立的垃圾回收线程,跟踪可达对象。在每个年老代垃圾回收周期中,在收集初期并发收集器会对整个应用进行简短的暂停,在收集中还会再暂停一次。第二次暂停会比第一次稍长,在此过程中多个线程同时进行垃圾回收工作。
    2. 并发收集器使用处理器换来短暂的停顿时间。在一个N个处理器的系统上,并发收集部分使用K/N个可用处理器进行回收,一般情况下1<=K<=N/4
    3. 在只有一个处理器的主机上使用并发收集器,设置为incremental mode模式也可获得较短的停顿时间。
    4. 浮动垃圾:由于在应用运行的同时进行垃圾回收,所以有些垃圾可能在垃圾回收进行完成时产生,这样就造成了“Floating Garbage”,这些垃圾需要在下次垃圾回收周期时才能回收掉。所以,并发收集器一般需要20%的预留空间用于这些浮动垃圾。
    5. Concurrent Mode Failure:并发收集器在应用运行时进行收集,所以需要保证堆在垃圾回收的这段时间有足够的空间供程序使用,否则,垃圾回收还未完成,堆空间先满了。这种情况下将会发生“并发模式失败”,此时整个应用将会暂停,进行垃圾回收。
    6. 启动并发收集器:因为并发收集在应用运行时进行收集,所以必须保证收集完成之前有足够的内存空间供程序使用,否则会出现“Concurrent Mode Failure”。通过设置-XX:CMSInitiatingOccupancyFraction=<N>指定还有多少剩余堆时开始执行并发收集
  4. 小结
    • 串行处理器:
       --适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。
       --缺点:只能用于小型应用
    • 并行处理器:
       --适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。
       --缺点:应用响应时间可能较长
    • 并发处理器:
       --适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。

三、常见配置举例
  1. 堆大小设置
    JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
    典型设置:
    • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
      -Xmx3550m:设置JVM最大可用内存为3550M。
      -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
      -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
      -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
    • java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
      -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
      -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
      -XX:MaxPermSize=16m:设置持久代大小为16m。
      -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
  2. 回收器选择
    JVM给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。
    1. 吞吐量优先的并行收集器
      如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。
      典型配置
      • java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
        -XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
        -XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
      • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
        -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
      • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100
        -XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
      • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
        -XX:+UseAdaptiveSizePolicy
        :设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
    2. 响应时间优先的并发收集器
      如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。
      典型配置
      • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
        -XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
        -XX:+UseParNewGC:设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
      • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
        -XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
        -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片
  3. 辅助信息
    JVM提供了大量命令行参数,打印信息,供调试使用。主要有以下一些:
    • -XX:+PrintGC
      输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs]

                      [Full GC 121376K->10414K(130112K), 0.0650971 secs]

    • -XX:+PrintGCDetails
      输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]

                      [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

    • -XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用
      输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
    • -XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用
      输出形式:Application time: 0.5291524 seconds
    • -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用
      输出形式:Total time for which application threads were stopped: 0.0468229 seconds
    • -XX:PrintHeapAtGC:打印GC前后的详细堆栈信息
      输出形式:
      34.702: [GC {Heap before gc invocations=7:
       def new generation   total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)
      eden space 49152K,  99% used [0x1ebd0000, 0x21bce430, 0x21bd0000)
      from space 6144K,  55% used [0x221d0000, 0x22527e10, 0x227d0000)
        to   space 6144K,   0% used [0x21bd0000, 0x21bd0000, 0x221d0000)
       tenured generation   total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)
      the space 69632K,   3% used [0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)
       compacting perm gen  total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)
         the space 8192K,  35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)
          ro space 8192K,  66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)
          rw space 12288K,  46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
      34.735: [DefNew: 52568K->3433K(55296K), 0.0072126 secs] 55264K->6615K(124928K)Heap after gc invocations=8:
       def new generation   total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)
      eden space 49152K,   0% used [0x1ebd0000, 0x1ebd0000, 0x21bd0000)
        from space 6144K,  55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)
        to   space 6144K,   0% used [0x221d0000, 0x221d0000, 0x227d0000)
       tenured generation   total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)
      the space 69632K,   4% used [0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)
       compacting perm gen  total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)
         the space 8192K,  35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)
          ro space 8192K,  66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)
          rw space 12288K,  46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
      }
      , 0.0757599 secs]
    • -Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析。
  4. 常见配置汇总
    1. 堆设置
      • -Xms:初始堆大小
      • -Xmx:最大堆大小
      • -XX:NewSize=n:设置年轻代大小
      • -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
      • -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
      • -XX:MaxPermSize=n:设置持久代大小
    2. 收集器设置
      • -XX:+UseSerialGC:设置串行收集器
      • -XX:+UseParallelGC:设置并行收集器
      • -XX:+UseParalledlOldGC:设置并行年老代收集器
      • -XX:+UseConcMarkSweepGC:设置并发收集器
    3. 垃圾回收统计信息
      • -XX:+PrintGC
      • -XX:+PrintGCDetails
      • -XX:+PrintGCTimeStamps
      • -Xloggc:filename
    4. 并行收集器设置
      • -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
      • -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
      • -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
    5. 并发收集器设置
      • -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
      • -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

四、调优总结
  1. 年轻代大小选择
    • 响应时间优先的应用尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。
    • 吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。
  2. 年老代大小选择
    • 响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:
      • 并发垃圾收集信息
      • 持久代并发收集次数
      • 传统GC信息
      • 花在年轻代和年老代回收上的时间比例
      减少年轻代和年老代花费的时间,一般会提高应用的效率
    • 吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。
  3. 较小堆引起的碎片问题
    因为年老代的并发收集器使用标记、清除算法,所以不会对堆进行压缩。当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象。但是,当堆空间较小时,运行一段时间以后,就会出现“碎片”,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记、清除方式进行回收。如果出现“碎片”,可能需要进行如下配置:
    • -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。
    • -XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩

五、参考文献

    04 juli

    十年

        呵呵,不是陈奕迅那首歌,说的是我的裤子的故事。一条跟了我十年的裤子。

        今天裤子破了洞,被同事看见了,晕的是还在屁股上,ft,不过好在窟窿不大,无所谓了。突然发现这条裤子已经跟了我十年左右了,期间陆陆续续穿过,不容易啊。

        这条裤子小姨给的,那时候应该还在初中,只记得那时还比较土,不好意思穿,一直放衣柜里,哈哈。后来跟到高中,记得有一回从家回学校,可能是开学,包里背了一些衣服、鞋啥的,其中就有这条裤子。后来,下公交车的时候,皮鞋坏了,一瘸一拐的,晕。索性拐到厕所里,把西裤换下,换上这条裤子,外加运动鞋,呵呵,Perfect~。后来裤子跟我来北京读本科了,一次上课,起立的时候桌子下面有颗钉子,结果把裤子左腿上划了一个窟窿,还挺大的,后来就不好意思穿了,不过裤子也没仍。结果考上研究生了,裤子还在,哈。这个时候,我的牛仔裤不少,更绝的是老摔跤,几条裤子都带窟窿,呵呵,所以也就习惯了穿窟窿裤子,这一条又被我翻出来了。

        貌似这次坏的是不可能再穿了吧,呵呵,谁知道呢?不会穿了,不过也舍不得丢,呵呵。

        看着那已经洗得泛白的裤子,一些事情,现在回忆起来确实如此的清晰,十年,转瞬之间....

    27 juni

    年复一年

        每年到了这个时候,学校各年级就开始对着女生楼唱歌了,歌声到了,也就预示着一批人又要毕业了。一到这种时候,就不能不想起两年前的我们。时间过的真快啊!

     两年,也就是眨眨眼睛。车峰今年五一回国结婚了,可惜的是时间太短了,也没机会聚聚,唉,这一走又不知道什么时候再回来了。不过好在网络通信还比较方便,离得挺远,感觉还是挺近的;牛磊这个bt,考研又考回来了,呵呵,真不知道怎么想的,还携家带口的,不过无所谓了,年轻嘛,哈,这下回来给我们当师弟了;小样儿葛立峰去年买房了,奢人就是奢人,花钱绝对走在第一位,哈哈;傻猪现在过得挺潇洒的,有老婆照顾的日子就是不一样啊;BT人嘛,一样bt着,有了gf还藏了半年,呵呵;甲鱼还是老样子,体型保持的还不错,没有继续变胖了;最杳无音信就是小胖了,傻猪前段时间去了趟广州,回来说是过得挺惨淡的,好好保重啊,呵呵,现在啥都不缺,就确个女人了,加油啦~

     眼瞅着就要毕业了,动荡的一年啊,不知道明年的这个时候我会在哪里呢?

    25 juni

    [项目总结 之七]一路走来-问题与思考

        这块就写点比较琐碎的东西了,想到啥写啥了~


    --多线程相关
        HashMap, Hashtable, ConcurrentHashMap
        把这三个拿出来,是因为项目里面Map用到的地方很多,碰到一些问题,需要对比一下。HashMap不是同步,所以不能用于多线程环境下;Hashtable是同步的了,可以用于多线程下,但是,需要注意一个问题。Map有两个个方法 keySet()values()用于得到Map中的键或值的一个集合,我们经常会做一些遍历的操作。多线程环境下,在数据量小的时候这样的遍历可能没有问题,但是在数据量大的情况下遍历就可能出现这个异常——java.util.ConcurrentModificationException。原因是你在遍历的同时有对Map进行了添加或删除Map元素的操作(注意:这里的添加是增加一个全新的元素,键必须是新的,如果你原键的基础上更新值,是不会有异常的)。数据量小的时候,由于遍历速度很快所以没有问题,在大数据量下,遍历时间延长,所以出现问题的可能性加大了。个人认为这点对应Hashtable很致命的,因为为了解决这样的问题你不得不在已经是同步的 Hashtable上再进行添加和遍历的同步,这点很不好。
       JDK5.0里引入了ConcurrentHashMap ,它本身是同步的,更好的是它避免了上面Hashtable遍历时会引发的问题。原理比较简单,就是在遍历时,对当前Map建立一个副本,遍历是针对副本进行的,遍历时对Map的任何操作都不在副本上生效,所以遍历可以成功进行。这样的结果是,遍历的时候,与真实Map可能会存在一些不同步的时候,不过,这点损失应该还是可以理解的。


        随手可得的线程池
    JDK5.0提供了对线程池的支持——Executor。简单点说就是new一个最大可以有多少个线程的池,然后把实现了Runnalbe接口的类扔进去就完了。该执行的执行、该等待的等待,不用操心了,呵呵。还是比较爽的。线程的东西,自己的实现也可以,但是总是对可靠性有些担忧,现在JDK提供支持了,放心使用吧~~


    --持久层的Bug
       持久层这块我们需求并不大,十来张表而已,使用的是Torque 。但是,就是这个Troque带来了不小的麻烦。Torque的原理是这样的,定义好数据库描述的schema(数据库换了但是schema是相同的,这点还是比较好的),它会帮你在对应数据库建表并生成一系列用于持久化的对象。这里想说的就是这些对象了,不像Hibernate生成的那些对象,是POJO。这里的对象有一套完成的体系,包含了所有持久化的功能。所以,如果把这些对象用于业务逻辑部分,那么业务逻辑就间接也Torque耦合了,但是如果不这样呢,又需要自己再做一次数据转换进行数据传递,有增加复杂性。
       在使用的过程中Torque并非想像的那么易用,好几次想换掉torque,但是又发现了其他问题。用Torque与Hibernate进行了 insert操作的比较(我们应用有大量的insert),Torque几乎比Hibernate快了一倍,这样的性能又不能轻易放弃。
       现在的Torque感觉就像鸡肋...

     

    --异步网关的设想
        目前的网关是同步网关,即:SIPC一侧消息的发送直接受制于WV消息的发送。流程如下:WV请求->SIPC请求->SIPC反馈->WV反馈。这样的话,网关仅仅只起到了代理的作用。但是,网关其实还可以做更多的东西。
       IM应用有个很大的特点,就是获取类操作(获取列表、获取好友)比较多,而更新类操作(添加/删除列表、添加/删除好友)比较少,因此,网关完全可以在用户登录的时候(或者其他时候),发送SIPC请求,获取用户相关信息,然后缓存在网关。这样的话,流程就变成这样了:WV请求->缓存->WV反馈。对于更新类操作,可以划分为两类——与业务有关的更新(如:添加联系人等)和与业务无关的更新(如:用户设置自己的资料等)。对于前一类必须是同步消息,但是对于后一类,网关只需进行字段有效性验证,即可回复用户,而不必登到服务器反馈以后才回复用户。
       WV本身是用于无线网络的,响应时间比较慢,因此,缩减消息量换来相应时间的提高应该是有意义的。


    --用好CVS(SVN)
        用的越多越能体会他的重要性,特别是当多个人进行并行开发的时候,没有这么一个东西,真不知道怎么弄。呵呵。不过,用的好的人并不多,我们开发的时候,针对CVS总会碰到这样那样的问题,说实话,应该搞个培训。

     

    PowerToy: aangepaste HTML

    收集的Java站点
    *