探究内存泄露—part1—编写泄露代码-java开发java经验技巧

探究内存泄露—part1—编写泄露代码-java开发java经验技巧

ID:32984082

大小:77.44 KB

页数:7页

时间:2019-02-18

探究内存泄露—part1—编写泄露代码-java开发java经验技巧_第1页
探究内存泄露—part1—编写泄露代码-java开发java经验技巧_第2页
探究内存泄露—part1—编写泄露代码-java开发java经验技巧_第3页
探究内存泄露—part1—编写泄露代码-java开发java经验技巧_第4页
探究内存泄露—part1—编写泄露代码-java开发java经验技巧_第5页
资源描述:

《探究内存泄露—part1—编写泄露代码-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、探究内存泄鉤一Paul—编写泄露代码-Java开发Java经验技巧探究内存泄M-Part1—编写泄露代码木文由ImportNew・黄索远翻译自captaindebug0欢迎加入翻译小组。转载请见文末要求。几天前我发现了一个小问题:有一个服务器在跑了一段吋间后挂掉了。重启脚本和系统后,这个问题还是会出现。因为问题代码不是关键业务,所以尽管有大量的数据丢失,但是问题并不严重。不过我述是决定作进一步的调查,来探寻一下问题到底出现在哪。首先注意到的是,服务器通过了所有的单元测试和集成环境的完整测试。在测试环境下使用测试数据吋运行得非常正常。那么为什么在工作环境中一跑起來就会出现问题呢?很容易就能想到

2、,也许是因为在实际运行时的负载大于测试,甚至超过了设计时所能承载的负重,从而耗尽了资源。但是到底是什么资源,又是在哪里耗尽的呢?这就是本文需要探究的难题。为了演示如何调查这个问题,第一件事情就是写一些内存泄露的代码。我将会釆用生产者一消费者模型,以便更好的说明这个问题。和往常一样,为了说明内存泄露代码,我需要人为建立一个场景。在这个场景中,假定你为一个证券经纪公司工作,这个公司将股票的销售额和股份记录在一个数据库中。通过一个简单进程获取命令并将其存放在一个队列屮。另一个进程从该队列中读取命令并将其写入数据库。命令的POJO(简单Java对彖)非常的直观:publicclassOrder{pr

3、ivatcfinalintid;privatefinalStringcode;privatefinalintamount;privatefinaldoubleprice;privatefinallongtime;privatcfinalIong[]padding;/***©paramid*The*@paramcode*The*©paramamount*theorderidstockcodenumberofshares*@paramprice*thepriceoftheshare*©paramtime*thetransactiontime*/publicOrder(intid,Stringco

4、de,intamount,doubleprice,longtime){super();this,id二id;this.code二code;this,amount二amount;this,price=price;this,time=time;//ThisjustmakestheOrderobjectbiggersothat//theexamplerunsoutofheapmorequickly,this.padding二newIong[3000];Arrays,fill(padding,0,padding,length-1,-2);}publicintgetTd(){rcturnid;}pub

5、licStringgetCode(){returncode;}publicintgetAmount(){returnamount;}publicdoublegetPrice(){returnprice;}publiclonggctTimc(){returntime;}}这个命令POJO是Spring应用的一部分。这个应用有三个主要的抽象类,当应用调用他们的start()方法时分别创建一个新进程。第一个抽象类是OrderFeedorun()方法会生成一个虚拟的命令并将其放置在队列中。生成命令后它会睡眠一会儿,然后生成一个新的命令。publicclassOrderFeedimplementsRu

6、nnable{privatcstaticRandomrand=newRandom();privatestaticintid=0;privatefinalBlockingQueue<0rder>orderQueue;publicOrderFeed(BlockingQueueorderQueue){this.orderQueue=orderQueue;}/***CalledbySpringafterloadingthecontext・Startproducingorders*/publicvoidstart(){Threadthread=newThread(this,"Orderp

7、roducer");thread,start();}/**Themainrunloop*/©Overridepublicvoidrun(){while(true){Orderorder=createOrder();orderQueue.add(order);sleep();}}privateOrdercreateOrder(){finalString:]stocks={〃BLND.L〃,〃DGE・L〃,〃MK

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。