SSH架构性能优化方案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
改变对象的值,如可以通过setValue之类的方法改变对象的变量达到重用的目的。
变量的注意事项
尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈
(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(
速度较慢。
尽量使用静态变量,即加修饰符static,如果类中的变量不会随他的实例而变化,就可 以定义为静态变量,从而使他所有的实例都共享这个变量。
J2EE平台架构性能优化方案
应用J2EE平台开发的系统的性能是系统使用者和开发者都关注的问题,
端编程时应注意的几个方面讨论代码对性能的影响,
并总结一些解决的建议。 关键词:性能,
Java,J2EE,EJB,Servlet,JDBC
一、概要
省构造函数和append的实现是:
public Stri ngBuffer() {//构造函数
扩充,在预先知道该Vector大小的话,可以指定其大小,避免容量扩充的开销,如知道
Vector大小为100时,初始化是就可以象这样。
Vector vect=.. new Vector(100);
优化循环体
循环是比较重复运行的地方, 如果循环次数很大,循环体内不好的代码对效率的影响就
会被放大而变的突出。考虑下面的代码片:
return true;
}
p rivate void en sureCa pacityHe Ip er(i nt minCap acity) {
int oldCa pacity = eleme ntData .len gth;
if (minCap acity > oldCa pacity) {
Object oldData[] = eleme ntData;
对象的创建
尽量少用new来初始化一个类的实例,当一个对象是用new进行初始化时,其构造
函数链的所有构造函数都被调用到,所以new操作符是很消耗系统资源的,new一个对象
收和处理。
当new创建对象不可避免时,注意避免多次的使用new初始化一个对象。
尽量在使用时再创建该对象。如:
NewObject object = new NewObject(); int value;
}
缺省分配10个对象大小容量。当执行add方法时,可以看到具体实现为:
p ublic syn chro ni zed boolea n addQbject o) { modCo un t++;
en sureCa pacityHe Ip er(eleme ntCo un t+1);
eleme ntData[eleme ntCo un t++] =o;
if(i>0 )
{
value =object.getValue();
}
可以修改为:
int value;
if(i>0 )
{
NewObject object = new NewObject();
Value =object.getValue();
另外,应该尽量重复使用一个对象,而不是声明新的同类对象。 一个重用对象的方法是
}
eleme ntData = new Object [n ewCa pacity];
System.arrayc opy( oldData, 0, eleme ntData, 0, eleme ntCo un t); }
}
我们可以看到,当Vector大小超过原来的大小时,一些代码的目的就是为了做容量的
Stri ngBuffer buffer=new Stri ngBufer(30); //分配指定的大小。
buffer.a ppen d("hello");
buffer.a ppen d(",");
buffer.a ppen d("welcometo worlwenku.baidu.com!");
String str = buffer.toStri ng();
this(16);//缺省容量16}
P ublic syn chro ni zed Strin gBuffer appen d(Stri ng str) { if (str == nu II) {
str = Strin g.valueOf(str);
}
int len =str.le ngth();
int n ewco unt = count+len;
Vector vect=new Vector(IOOO);
for( in ti=0; i<vect.size(); i++){
for
int size = vect.size(); for( int i=0; i>size; i++){
如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调
再看如下的代码片:
for (int i=0;i <100000;i++) if (i%10 == 9) {
...//每十次执行一次
改写成也可以提高效率:
for(i nti =0,j =10; i<100000; i++,j--){ if(j == 0){
...//每十次执行一次
j = 10;
}
}
所以,当有较大的循环时,应该检查循环内是否有效率不高的地方,寻找更优的方案加 以改进。
生成对象时,分配合理的空间和大小
Java中的很多类都有它的默认的空间分配大小,对于一些有大小的对象的初始化,应
创建时,我们指定了它的大小。
另外的一个例子是Vector,当声明Vector vect=new Vector()时,系统调用:
public Vector() {//缺省构造函数
this(10);//容量是10;
if(n ewco unt > value .len gth)
expan dCa pacity (n ewco un t);
//扩充容量
str.getChars(0, le n, value, coun t);
count = n ewco unt;
return this;
}
当字符串的大小超过缺省
容量,更好的写法为:
int n ewCa pacity = (ca pacity In creme nt > 0) ? (oldCa pacity+cap acity In creme nt):
(oldCa pacity * 2);
if (n ewCa pacity < minCap acity) {
n ewCa pacity = minCap acity;
变量的注意事项
尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈
(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(
速度较慢。
尽量使用静态变量,即加修饰符static,如果类中的变量不会随他的实例而变化,就可 以定义为静态变量,从而使他所有的实例都共享这个变量。
J2EE平台架构性能优化方案
应用J2EE平台开发的系统的性能是系统使用者和开发者都关注的问题,
端编程时应注意的几个方面讨论代码对性能的影响,
并总结一些解决的建议。 关键词:性能,
Java,J2EE,EJB,Servlet,JDBC
一、概要
省构造函数和append的实现是:
public Stri ngBuffer() {//构造函数
扩充,在预先知道该Vector大小的话,可以指定其大小,避免容量扩充的开销,如知道
Vector大小为100时,初始化是就可以象这样。
Vector vect=.. new Vector(100);
优化循环体
循环是比较重复运行的地方, 如果循环次数很大,循环体内不好的代码对效率的影响就
会被放大而变的突出。考虑下面的代码片:
return true;
}
p rivate void en sureCa pacityHe Ip er(i nt minCap acity) {
int oldCa pacity = eleme ntData .len gth;
if (minCap acity > oldCa pacity) {
Object oldData[] = eleme ntData;
对象的创建
尽量少用new来初始化一个类的实例,当一个对象是用new进行初始化时,其构造
函数链的所有构造函数都被调用到,所以new操作符是很消耗系统资源的,new一个对象
收和处理。
当new创建对象不可避免时,注意避免多次的使用new初始化一个对象。
尽量在使用时再创建该对象。如:
NewObject object = new NewObject(); int value;
}
缺省分配10个对象大小容量。当执行add方法时,可以看到具体实现为:
p ublic syn chro ni zed boolea n addQbject o) { modCo un t++;
en sureCa pacityHe Ip er(eleme ntCo un t+1);
eleme ntData[eleme ntCo un t++] =o;
if(i>0 )
{
value =object.getValue();
}
可以修改为:
int value;
if(i>0 )
{
NewObject object = new NewObject();
Value =object.getValue();
另外,应该尽量重复使用一个对象,而不是声明新的同类对象。 一个重用对象的方法是
}
eleme ntData = new Object [n ewCa pacity];
System.arrayc opy( oldData, 0, eleme ntData, 0, eleme ntCo un t); }
}
我们可以看到,当Vector大小超过原来的大小时,一些代码的目的就是为了做容量的
Stri ngBuffer buffer=new Stri ngBufer(30); //分配指定的大小。
buffer.a ppen d("hello");
buffer.a ppen d(",");
buffer.a ppen d("welcometo worlwenku.baidu.com!");
String str = buffer.toStri ng();
this(16);//缺省容量16}
P ublic syn chro ni zed Strin gBuffer appen d(Stri ng str) { if (str == nu II) {
str = Strin g.valueOf(str);
}
int len =str.le ngth();
int n ewco unt = count+len;
Vector vect=new Vector(IOOO);
for( in ti=0; i<vect.size(); i++){
for
int size = vect.size(); for( int i=0; i>size; i++){
如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调
再看如下的代码片:
for (int i=0;i <100000;i++) if (i%10 == 9) {
...//每十次执行一次
改写成也可以提高效率:
for(i nti =0,j =10; i<100000; i++,j--){ if(j == 0){
...//每十次执行一次
j = 10;
}
}
所以,当有较大的循环时,应该检查循环内是否有效率不高的地方,寻找更优的方案加 以改进。
生成对象时,分配合理的空间和大小
Java中的很多类都有它的默认的空间分配大小,对于一些有大小的对象的初始化,应
创建时,我们指定了它的大小。
另外的一个例子是Vector,当声明Vector vect=new Vector()时,系统调用:
public Vector() {//缺省构造函数
this(10);//容量是10;
if(n ewco unt > value .len gth)
expan dCa pacity (n ewco un t);
//扩充容量
str.getChars(0, le n, value, coun t);
count = n ewco unt;
return this;
}
当字符串的大小超过缺省
容量,更好的写法为:
int n ewCa pacity = (ca pacity In creme nt > 0) ? (oldCa pacity+cap acity In creme nt):
(oldCa pacity * 2);
if (n ewCa pacity < minCap acity) {
n ewCa pacity = minCap acity;