仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2651|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之进步Java程序内存效力

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的程序我们都晓得Java程序之以是被宽大程序员喜爱,很年夜的一个缘故原由是由于Java有GC(渣滓搜集),不必程序员花很年夜的精神来办理内存开释和泄露成绩。而这些成绩老是C/C++程序员必要花很年夜精神来仔细空中对的。

成绩老是双面的,GC给我们带来了很年夜的康乐,开释了程序员良多的精神和工夫,可是在某些时分也会给我们带来一些小小的贫苦。Java里的Object并不是交给GC往开释便可万事大吉了,上面从JDK1.4的Demo中Java2D的MemoryMonitor提及。

先看看MemoryMonitor独自运转的效果。




能够看到由于有个While轮回,GC开释内存有必定的工夫,在这个工夫两头,内存损耗的很凶猛。峰值到达923K。程序代码的以下:

//SysGcMain.javaCreatedon9:15:59

packagecom.gx2.system;

/**

*@authorFrankGao@version1.00

*CopyrightbyGX2Studio2003

*Copyright(c)2003SunMicrosystems,Inc.AllRightsReserved.

*

*Redistributionanduseinsource……今后省略

*/



/*

*@(#)MemoryMonitor.java1.3203/01/23

*/



importjava.awt.*;

importjava.awt.event.*;

importjava.awt.image.BufferedImage;

importjava.awt.geom.Line2D;

importjava.awt.geom.Rectangle2D;

importjava.util.Date;

importjavax.swing.*;

importjavax.swing.border.EtchedBorder;

importjavax.swing.border.TitledBorder;





/**

*TracksMemoryallocated&used,displayedingraphform.

*/

publicclassSysGcMainextendsJPanel{



staticJCheckBoxdateStampCB=newJCheckBox("OutputDateStamp");

publicSurfacesurf;

JPanelcontrols;

booleandoControls;

JTextFieldtf;



publicSysGcMain(){

setLayout(newBorderLayout());

setBorder(newTitledBorder(newEtchedBorder(),"MemoryMonitor"));

add(surf=newSurface());

controls=newJPanel();

controls.setPreferredSize(newDimension(135,80));

Fontfont=newFont("serif",Font.PLAIN,10);

JLabellabel=newJLabel("SampleRate");

label.setFont(font);

label.setForeground(Color.black);

controls.add(label);

tf=newJTextField("1000");

tf.setPreferredSize(newDimension(45,20));

controls.add(tf);

controls.add(label=newJLabel("ms"));

label.setFont(font);

label.setForeground(Color.black);

controls.add(dateStampCB);

dateStampCB.setFont(font);

addMouseListener(newMouseAdapter(){

publicvoidmouseClicked(MouseEvente){

removeAll();

if((doControls=!doControls)){

surf.stop();

add(controls);

}else{

try{

surf.sleepAmount=Long.parseLong(tf.getText().trim());

}catch(Exceptionex){}

surf.start();

add(surf);

}

validate();

repaint();

}

});

}





publicclassSurfaceextendsJPanelimplementsRunnable{



publicThreadthread;

publiclongsleepAmount=1000;

privateintw,h;

privateBufferedImagebimg;

privateGraphics2Dbig;

privateFontfont=newFont("TimesNewRoman",Font.PLAIN,11);

privateRuntimer=Runtime.getRuntime();

privateintcolumnInc;

privateintpts[];

privateintptNum;

privateintascent,descent;

privatefloatfreeMemory,totalMemory;

privateRectanglegraphOutlineRect=newRectangle();

privateRectangle2DmfRect=newRectangle2D.Float();

privateRectangle2DmuRect=newRectangle2D.Float();

privateLine2DgraphLine=newLine2D.Float();

privateColorgraphColor=newColor(46,139,87);

privateColormfColor=newColor(0,100,0);

privateStringusedStr;





publicSurface(){

setBackground(Color.black);

addMouseListener(newMouseAdapter(){

publicvoidmouseClicked(MouseEvente){

if(thread==null)start();elsestop();

}

});

}



publicDimensiongetMinimumSize(){

returngetPreferredSize();

}



publicDimensiongetMaximumSize(){

returngetPreferredSize();

}



publicDimensiongetPreferredSize(){

returnnewDimension(135,80);

}





publicvoidpaint(Graphicsg){



if(big==null){

return;

}



big.setBackground(getBackground());

big.clearRect(0,0,w,h);



floatfreeMemory=(float)r.freeMemory();

floattotalMemory=(float)r.totalMemory();



//..Drawallocatedandusedstrings..

big.setColor(Color.green);

big.drawString(String.valueOf((int)totalMemory/1024)+"Kallocated",4.0f,(float)ascent+0.5f);

usedStr=String.valueOf(((int)(totalMemory-freeMemory))/1024)

+"Kused";

big.drawString(usedStr,4,h-descent);



//Calculateremainingsize

floatssH=ascent+descent;

floatremainingHeight=(float)(h-(ssH*2)-0.5f);

floatblockHeight=remainingHeight/10;

floatblockWidth=20.0f;

floatremainingWidth=(float)(w-blockWidth-10);



//..MemoryFree..

big.setColor(mfColor);

intMemUsage=(int)((freeMemory/totalMemory)*10);

inti=0;

for(;i<MemUsage;i++){

mfRect.setRect(5,(float)ssH+i*blockHeight,

blockWidth,(float)blockHeight-1);

big.fill(mfRect);

}



//..MemoryUsed..

big.setColor(Color.green);

for(;i<10;i++){

muRect.setRect(5,(float)ssH+i*blockHeight,

blockWidth,(float)blockHeight-1);

big.fill(muRect);

}



//..DrawHistoryGraph..

big.setColor(graphColor);

intgraphX=30;

intgraphY=(int)ssH;

intgraphW=w-graphX-5;

intgraphH=(int)remainingHeight;

graphOutlineRect.setRect(graphX,graphY,graphW,graphH);

big.draw(graphOutlineRect);



intgraphRow=graphH/10;



//..Drawrow..

for(intj=graphY;j<=graphH+graphY;j+=graphRow){

graphLine.setLine(graphX,j,graphX+graphW,j);

big.draw(graphLine);

}



//..Drawanimatedcolumnmovement..

intgraphColumn=graphW/15;



if(columnInc==0){

columnInc=graphColumn;

}



for(intj=graphX+columnInc;j<graphW+graphX;j+=graphColumn){

graphLine.setLine(j,graphY,j,graphY+graphH);

big.draw(graphLine);

}



--columnInc;



if(pts==null){

pts=newint[graphW];

ptNum=0;

}elseif(pts.length!=graphW){

inttmp[]=null;

if(ptNum<graphW){

tmp=newint[ptNum];

System.arraycopy(pts,0,tmp,0,tmp.length);

}else{

tmp=newint[graphW];

System.arraycopy(pts,pts.length-tmp.length,tmp,0,tmp.length);

ptNum=tmp.length-2;

}

pts=newint[graphW];

System.arraycopy(tmp,0,pts,0,tmp.length);

}else{

big.setColor(Color.yellow);

pts[ptNum]=(int)(graphY+graphH*(freeMemory/totalMemory));

for(intj=graphX+graphW-ptNum,k=0;k<ptNum;k++,j++){

if(k!=0){

if(pts[k]!=pts[k-1]){

big.drawLine(j-1,pts[k-1],j,pts[k]);

}else{

big.fillRect(j,pts[k],1,1);

}

}

}

if(ptNum+2==pts.length){

//throwoutoldestpoint

for(intj=1;j<ptNum;j++){

pts[j-1]=pts[j];

}

--ptNum;

}else{

ptNum++;

}

}

g.drawImage(bimg,0,0,this);

}





publicvoidstart(){

thread=newThread(this);

thread.setPriority(Thread.MIN_PRIORITY);

thread.setName("MemoryMonitor");

thread.start();

}





publicsynchronizedvoidstop(){

thread=null;

notify();

}

publicvoidrun(){

Threadme=Thread.currentThread();

while(thread==me&&!isShowing()||getSize().width==0){

try{

thread.sleep(500);

}catch(InterruptedExceptione){return;}

}



while(thread==me&&isShowing()){

Dimensiond=getSize();

if(d.width!=w||d.height!=h){

w=d.width;

h=d.height;

bimg=(BufferedImage)createImage(w,h);

big=bimg.createGraphics();

big.setFont(font);

FontMetricsfm=big.getFontMetrics(font);

ascent=(int)fm.getAscent();

descent=(int)fm.getDescent();

}

repaint();

try{

thread.sleep(sleepAmount);

}catch(InterruptedExceptione){break;}

if(SysGcMain.dateStampCB.isSelected()){

System.out.println(newDate().toString()+""+usedStr);

}

//addby健忘幻想2004-11-1

//不强迫GC的话,由于while轮回,内存会损耗的很凶猛

//加高低面两句,能够包管内存损耗安稳



Runtime.getRuntime().freeMemory();

Runtime.getRuntime().gc();

}

thread=null;

}

}





publicstaticvoidmain(Strings[]){

finalSysGcMaindemo=newSysGcMain();

WindowListenerl=newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){System.exit(0);}

publicvoidwindowDeiconified(WindowEvente){demo.surf.start();}

publicvoidwindowIconified(WindowEvente){demo.surf.stop();}

};

JButtonbutton=newJButton("ForceGC");

button.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevent){

Runtime.getRuntime().freeMemory();

Runtime.getRuntime().gc();

}

});



JFramef=newJFrame("FrankGao-MemoryMonitor");

f.addWindowListener(l);

f.getContentPane().add("Center",demo);

f.getContentPane().add(button,BorderLayout.SOUTH);

f.pack();

f.setSize(newDimension(200,200));

f.setVisible(true);

demo.surf.start();

}

}


在while轮回中到场强迫gc,内存峰值失掉了很好的把持保持程度。

Runtime.getRuntime().freeMemory();

Runtime.getRuntime().gc();






由此能够思索在,程序while等对照好内存的中央接纳上述办法,下降内存峰值,进步内存效力。


你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-21 13:07:01 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
不帅 该用户已被删除
板凳
发表于 2015-1-25 22:02:30 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
柔情似水 该用户已被删除
地板
发表于 2015-2-3 11:40:18 来自手机 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
精灵巫婆 该用户已被删除
5#
发表于 2015-2-8 20:25:15 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
小女巫 该用户已被删除
6#
发表于 2015-2-12 09:27:39 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
金色的骷髅 该用户已被删除
7#
发表于 2015-2-24 02:29:00 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
变相怪杰 该用户已被删除
8#
发表于 2015-2-26 07:26:47 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
分手快乐 该用户已被删除
9#
发表于 2015-3-8 12:50:43 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
飘灵儿 该用户已被删除
10#
 楼主| 发表于 2015-3-9 13:10:58 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
11#
发表于 2015-3-14 14:02:20 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
小妖女 该用户已被删除
12#
发表于 2015-3-21 09:04:14 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
莫相离 该用户已被删除
13#
发表于 2015-4-3 21:41:44 | 只看该作者
是一种使用者不需花费很多时间学习的语言
只想知道 该用户已被删除
14#
发表于 2015-4-6 04:08:28 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
若相依 该用户已被删除
15#
发表于 2015-4-10 02:23:05 | 只看该作者
是一种突破用户端机器环境和CPU
海妖 该用户已被删除
16#
发表于 2015-5-5 04:16:09 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
谁可相欹 该用户已被删除
17#
发表于 2015-5-8 09:40:38 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
蒙在股里 该用户已被删除
18#
发表于 2015-6-4 16:59:33 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-6-6 23:12:33 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
飘飘悠悠 该用户已被删除
20#
发表于 2015-6-13 12:57:41 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表