??xml version="1.0" encoding="utf-8" standalone="yes"?>
一?/span> General Techniques
1?span style="FONT: 7pt 'Times New Roman'"> 引数?/span> by value 方式而非 by reference 方式传?/span>
2?span style="FONT: 7pt 'Times New Roman'"> 对于不变?/span> data ?/span> object reference 使用 final ,final 仅仅?/span> object reference 自n成ؓ不变量,但ƈ不限制它所指向对象的改?/span>
3?span style="FONT: 7pt 'Times New Roman'"> ~省情况下,所?/span> non-static 都可以被覆写Q不?/span> , 则用 final 防止覆写
4?span style="FONT: 7pt 'Times New Roman'"> vector 容器包含的是对象Q与 arrays 要区别,但我认ؓ Vector 的功能实际上有些像跟 Array List 差不多,只是 vector 现在不经怋?/span>
5?span style="FONT: 7pt 'Times New Roman'"> 多态优?/span> instanceof Q只有在不得已的情况下?/span>
“如果你Ҏ(gu)对象的型别来触发行ؓQ那改l自׃个耛_?/font>
例如Q当你必M一?/span> base type 做向下{型ؓ derived type 的时候,必须使用?/span>
?
Vector shapeVector = new Vector(10);
shapeVector.add(new Triangle());
shapeVector.add(new Triangle());
shapeVector.add(new Circle());
//...
//Assume many Triangles and Circles are added and removed
//...
int size = shapeVector.size();
for (int i=0; i<size; i++)
{
Object o = shapeVector.get(i);
if (o instanceof Triangle)
{
if (((Triangle)o).isRightTriangle())
{
//...
}
}
else if (o instanceof Circle)
{
double rad = ((Circle)o).radius();
//...
}
}
6
、一旦不需要对象的引用Q就它设ؓ
null
Q?/span>
管?/span>
GC,
你还是要x的你的代码如何运用内存;
二?span style="FONT: 7pt 'Times New Roman'">
对象与相{?/span>
7
、区?/span>
reference type
?/span>
primitive type
Q理解他们的差异Q你会在q用他们时候做出明智的
选择Q?/span>
Boolean(boolean)
Character(char)
Byte(byte)
Integer(int)
Float(float)
Long(long)
Short(short)
Double(double)
基本型别相等Q只要是值相{就可以拉,不管是不是同一cdQ而引用类型必d按照引用的比较方式来比较Q譬?/span>
equals();
8
?/span>
java.lang.object
提供?/span>
equals()
Ҏ(gu)很多时候不是你惌的,你需要自己写一些比较的Ҏ(gu)
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj != null && getClass() == obj.getClass())
{
Golfball gb = (Golfball)obj; //Classes are equal, downcast.
if (brand.equals(gb.brand()) && //Compare attributes.
make.equals(gb.make()) &&
compression == gb.compression())
{
return true;
}
}
return false;
}
三?span style="FONT: 7pt 'Times New Roman'">
java
异常
1?span style="FONT: 7pt 'Times New Roman'">
try,cacth,finally
不要?/span>
catch
的异常覆盖掉Q在q样的情况下Q我们要专门把异怿存下来,如用一?/span>
vector
保存Q?/span>
不要忽略M一个异常,因ؓ异常一旦出玎ͼ抛出异常的那个线E将会终止;
一个异常加入到
throw
子句Q会影响到调用它的所有函?/span>
使用
finally
防止资源泄露Q譬如在q接数据库的时候在
finally
中关闭连接;
不要?/span>
try
字段中返回;
不要?/span>
try
?/span>
catch
用于程控制
;
不要每逢出错的使用
try
?/span>
catch;
不要在构造函C抛出异常Q?/span>
抛出异常前,请将对象|ؓ有效状态;
四?span style="FONT: 7pt 'Times New Roman'">
性能
1?span style="FONT: 7pt 'Times New Roman'">
先把焦点攑֜设计Q数据机构和法斚w
2?span style="FONT: 7pt 'Times New Roman'">
如果q行字符串的拼接Q用
String Buffer
?/span>
String
快许多?/span>
3?span style="FONT: 7pt 'Times New Roman'">
在面向对象中Q对象的创徏是昂늚Q因此需要将对象的创建成本降到最低,减少一些没有必要的对象Q在非必要的时候,别生你的对?/span>
4?span style="FONT: 7pt 'Times New Roman'">
同步减到最低,增加
stack
的?/span>
5?span style="FONT: 7pt 'Times New Roman'">
使用基本型别代码会更?/span>
6?span style="FONT: 7pt 'Times New Roman'">
在?/span>
vector
时候,?/span>
get()
来获取对象,而不?/span>
Interator
7?span style="FONT: 7pt 'Times New Roman'">
优先使用
array,
再考虑
ArrayList
?/span>
Vector
Q如果不需?/span>
vector
的同步特性,考虑使用
ArrayList
8?span style="FONT: 7pt 'Times New Roman'">
可能的重复使用对象Q这比重新创建对象更有效
9?span style="FONT: 7pt 'Times New Roman'">
使用~式评估Qgq计,不必要的计算永远都不要计?/span>
10?/span>
手动优化你的代码Q特别是执行的顺?/span>
一?/span> ?/span>
Apache JMeter ?/span> 100 Q的 Java 桌面应用E序。用于对软g做压力测试(例如 Web 应用Q?/span> 它可以用于测试静态何动态资源例如静态文件?/span> Java 服务程序?/span> CGI 脚本?/span> Java 对象、数据库Q?/span> FTP 服务?/span> , {等?/span> JMeter 可以用于Ҏ(gu)务器、网l或对象模拟巨大的负载,来在不同压力cd下测试它们的强度和分析整体性能?/span>
另外Q?/span> JMeter 能够对应用程序做衰退试Q通过创徏带有断言的脚本来验证你的E序q回了你期望的结果。ؓ了最大限度的灉|性, JMeter 允许使用正则表达式创建断a?/span>
来开发的主要目标是?/span> JMeter 可能地变成一个有用的衰退试工具Q而不损失 JMeter 地压力测试能力?/span>
衰退试Q通过回归试{方法来保证l过修改的代码没有衰退Q质量下降)?/font>
二?/span> 安装与配|?/span>
JMeter 的安装过E非常简单:
W一?/span>
安装
JDK
Q这里?/span>
JDK
W二?/span> 下蝲 JMeter Qƈ解压
官方下蝲地址Q?/span> http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi Q下?/span>
jakarta-jmeter-2.2.zip
包,大小Q?/span>
W三?/span> 配置环境变量
JAVA_HOME = ?/font>
JMeter = ?/font>
CLASS_PATH=?JAVA_HOME%\bin;%JAVA_HOME%\lib\tools.jar;%JMeter\bin%?/font>
W四?/span> q行
在命令行q行 jmeter.bat Q出现如下界面,说明安装成功Q?/span>
三?/span> 目应用
1. 目需?/span>
模拟 5 个用户ƈ发请求,每个用户h两次Q一ơ请求结束后Q发Z一个请求)Q得出各个请求样本的响应旉Qƈ得出一些统计性的数据?/span>
2. 建立试计划
首先Q添加一个线E组Q如下图Q?/font>
用户q发Cؓ 5 Q因Z个用戯求我们可以看作是一个请求线E,所以我们将U程数设|ؓ 5 。这里设|休眠时间ؓ 0 Q@环的ơ数?/span> 2 ?/span>
其次Q徏立默认的
HTTP
q接属性,q样不用每次都重新输入参敎ͼ如下图:
再次Q徏立要试?/span> Http hQ如下图
最后,建立查看l果形式Q我们采用表格数据记?/font>
3 Q运行测试脚?/span>
点击要测试的脚本Q然后执行菜单运?/span> ?/span> 》开始,试开始?/span>
4 Q测试数据分?/span>
试完成之后Q数据如下:
聚合数据分析l果如下Q?/font>
模拟 5 个用户ƈ发访?/span> http://10.36.32.5:8080/wwwncsl/default.htm 面Q每个用户@环访问一ơ,d 10 个样本数据。最大响应时间ؓ 10.355s Q最短响应时间ؓ 2.84s Q^均ؓ 6.572s
90% 的可能集中在响应旉?/span> 10.355s ?/span>