javaの性能の優れた資料は3収集します。
ソース:
http://www.cnblogs.com/chinafine/articles/1787118.html
http://www.cnblogs.com/chinafine/articles/1787118.html
、
, , , , , 。
:
import java.util.vector;
class cel {
void method (vector vector) {
for (int i = 0; i < vector.size (); i++) // violation
; // ...
}
}
:
class cel_fixed {
void method (vector vector) {
int size = vector.size ()
for (int i = 0; i < size; i++)
; // ...
}
}
、 'vectors' 'hashtables'
jvm vector , , , 。 vector 。
, 10 。 。
:
import java.util.vector;
public class dic {
public void addobjects (object[] o) {
// if length > 10, vector needs to expand
for (int i = 0; i< o.length;i++) {
v.add(o); // capacity before it can add more elements.
}
}
public vector v = new vector(); // no initialcapacity.
}
:
。
public vector v = new vector(20);
public hashtable hash = new hashtable(10);
:
dov bulka, "java performance and scalability volume 1: server-side programming
techniques" addison wesley, isbn: 0-201-70429-3 pp.55 – 57
、 finally stream
, 。 finally 。 ,finally , 。
:
import java.io.*;
public class cs {
public static void main (string args[]) {
cs cs = new cs ();
cs.method ();
}
public void method () {
try {
fileinputstream fis = new fileinputstream ("cs.java");
int count = 0;
while (fis.read () != -1)
count++;
system.out.println (count);
fis.close ();
} catch (filenotfoundexception e1) {
} catch (ioexception e2) {
}
}
}
:
catch finally
:
peter haggar: "practical java - programming language guide".
addison wesley, 2000, pp.77-79
、 'system.arraycopy ()'
'system.arraycopy ()' 。
:
public class irb
{
void method () {
int[] array1 = new int [100];
for (int i = 0; i < array1.length; i++) {
array1 [i] = i;
}
int[] array2 = new int [100];
for (int i = 0; i < array2.length; i++) {
array2 [i] = array1 [i]; // violation
}
}
}
:
public class irb
{
void method () {
int[] array1 = new int [100];
for (int i = 0; i < array1.length; i++) {
array1 [i] = i;
}
int[] array2 = new int [100];
system.arraycopy(array1, 0, array2, 0, 100);
}
}
:
http://www.cs.cmu.edu/~jch/java/speed.html
、 getter/setter ”final”
getter/setter final, , , , ”inlined”
:
class maf {
public void setsize (int size) {
_size = size;
}
private int _size;
}
:
class daf_fixed {
final public void setsize (int size) {
_size = size;
}
private int _size;
}
:xiao1227372602; , final , : :
public class FinalTest {
private int size;
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
=========================
public class FinalTest2 {
private int size;
public int getSize() {
return size;
}
public final void setSize(int size) {
this.size = size;
}
}
===========================
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
FinalTest ft = null;
long begin7 = System.currentTimeMillis();
int i = 0;
int time = Integer.MAX_VALUE;
while(i<time){
ft = new FinalTest();
ft.setSize(1);
ft.getSize();
i++;
}
long end7 = System.currentTimeMillis();
System.out.println(end7-begin7);
ft = null;
System.out.println("================================");
FinalTest2 ft2 = null;
long begin8 = System.currentTimeMillis();
int i2 = 0;
int time2 = Integer.MAX_VALUE;
while(i2<time2){
ft2 = new FinalTest2();
ft2.setSize(1);
ft2.getSize();
i2++;
}
long end8 = System.currentTimeMillis();
System.out.println(end8-begin8);
ft2 = null;
}
}
:
warren n. and bishop p. (1999), "java in practice", p. 4-5
addison-wesley, isbn 0-201-36065-9
、 instanceof
,instanceof true。
:
public class uiso {
public uiso () {}
}
class dog extends uiso {
void method (dog dog, uiso u) {
dog d = dog;
if (d instanceof uiso) // always true.
system.out.println("dog is a uiso");
uiso uiso = u;
if (uiso instanceof object) // always true.
system.out.println("uiso is an object");
}
}
:
instanceof 。
class dog extends uiso {
void method () {
dog d;
system.out.println ("dog is an uiso");
system.out.println ("uiso is an uiso");
}
}
、
object。 , “ ” 。 , 。
:
class unc {
string _id = "unc";
}
class dog extends unc {
void method () {
dog dog = new dog ();
unc animal = (unc)dog; // not necessary.
object o = (object)dog; // not necessary.
}
}
:
class dog extends unc {
void method () {
dog dog = new dog();
unc animal = dog;
object o = dog;
}
}
:
nigel warren, philip bishop: "java in practice - design styles and idioms
for effective java". addison-wesley, 1999. pp.22-23
、 , charat() startswith()
startswith() , , string api !
:
public class pcts {
private void method(string s) {
if (s.startswith("a")) { // violation
// ...
}
}
}
'startswith()' 'charat()'.
public class pcts {
private void method(string s) {
if ('a' == s.charat(0)) {
// ...
}
}
}
:xiao1227372602; , :
=============startsWith=============
15433
=============charAt=============
6766
:
public class SignalString2 {
public SignalString2(){
}
protected void amethod(String str){
if(str.startsWith("a")){
//System.out.println("startsWith");
}
}
protected void amethod2(String str){
if('a'==str.charAt(0)){
//System.out.println("charAt");
}
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
SignalString2 s2 = new SignalString2();
System.out.println("=============startsWith=============");
long begin8 = System.currentTimeMillis();
int i2 = 0;
int time2 = Integer.MAX_VALUE;
while(i2<time2){
s2.amethod("a");
i2++;
}
long end8 = System.currentTimeMillis();
System.out.println(end8-begin8);
s2 = null;
s2 = new SignalString2();
System.out.println("=============charAt=============");
long begin9 = System.currentTimeMillis();
int i3 = 0;
int time3 = Integer.MAX_VALUE;
while(i3<time3){
s2.amethod2("a");
i3++;
}
long end9 = System.currentTimeMillis();
System.out.println(end9-begin9);
}
}
:
dov bulka, "java performance and scalability volume 1: server-side programming
techniques" addison wesley, isbn: 0-201-70429-3
、 'a / b'
"/" “ ” , 。
:
public class sdiv {
public static final int num = 16;
public void calculate(int a) {
int div = a / 4; // should be replaced with "a >> 2".
int div2 = a / 8; // should be replaced with "a >> 3".
int temp = a / 3;
}
}
:
public class sdiv {
public static final int num = 16;
public void calculate(int a) {
int div = a >> 2;
int div2 = a >> 3;
int temp = a / 3; //
}
}
:xiao1227372602; 9:1;
、 'a * b'
。
[i] , , , , 。 。
:
public class smul {
public void calculate(int a) {
int mul = a * 4; // should be replaced with "a << 2".
int mul2 = 8 * a; // should be replaced with "a << 3".
int temp = a * 3;
}
}
:
package opt;
public class smul {
public void calculate(int a) {
int mul = a << 2;
int mul2 = a << 3;
int temp = a * 3; //
}
}
、 , ' ' " ",
:
public class str {
public void method(string s) {
string string = s + "d" // violation.
string = "abc" + "d" // violation.
}
}
:
' '
public class str {
public void method(string s) {
string string = s + 'd'
string = "abc" + 'd'
}
}
、 synchronized( )
, 。
:
import java.util.vector;
public class syn {
public synchronized void method (object o) {
}
private void test () {
for (int i = 0; i < vector.size(); i++) {
method (vector.elementat(i)); // violation
}
}
private vector vector = new vector (5, 5);
}
:
, , :
import java.util.vector;
public class syn {
public void method (object o) {
}
private void test () {
synchronized{//
for (int i = 0; i < vector.size(); i++) {
method (vector.elementat(i));
}
}
}
private vector vector = new vector (5, 5);
}
、 try/catch
try/catch , , jit jit jvm, 21% !
:
import java.io.fileinputstream;
public class try {
void method (fileinputstream fis) {
for (int i = 0; i < size; i++) {
try { // violation
_sum += fis.read();
} catch (exception e) {}
}
}
private int _sum;
}
:
try/catch
void method (fileinputstream fis) {
try {
for (int i = 0; i < size; i++) {
_sum += fis.read();
}
} catch (exception e) {}
}
:
peter haggar: "practical java - programming language guide".
addison wesley, 2000, pp.81 – 83
、 boolean ,
boolean true ( boolean ). boolean 2 :
1) ( 5 );
2) 。
:
public class ueq
{
boolean method (string string) {
return string.endswith ("a") == true; // violation
}
}
:
class ueq_fixed
{
boolean method (string string) {
return string.endswith ("a");
}
}
、 , 'string' 'stringbuffer'
。
:
public class usc {
string method () {
stringbuffer s = new stringbuffer ("hello");
string t = s + "world!";
return t;
}
}
:
stringbuffer string, string , 。
、 'stringtokenizer' 'indexof()' 'substring()'
。 indexof() substring() stringindexoutofboundsexception。 stringtokenizer , 。
:
public class ust {
void parsestring(string string) {
int index = 0;
while ((index = string.indexof(".", index)) != -1) {
system.out.println (string.substring(index, string.length()));
}
}
}
:
graig larman, rhett guthrie: "java 2 performance and idiom guide"
prentice hall ptr, isbn: 0-13-014260-3 pp. 282 – 283
、 "if (cond) return; else return;"
:
public class if {
public int method(boolean isdone) {
if (isdone) {
return 0;
} else {
return 10;
}
}
}
:
public class if {
public int method(boolean isdone) {
return (isdone ? 0 : 10);
}
}
、 "if (cond) a = b; else a = c;"
:
public class ifas {
void method(boolean istrue) {
if (istrue) {
_value = 0;
} else {
_value = 1;
}
}
private int _value = 0;
}
:
public class ifas {
void method(boolean istrue) {
_value = (istrue ? 0 : 1); // compact expression.
}
private int _value = 0;
}
、
:
import java.util.vector;
public class loop {
void method (vector v) {
for (int i=0;i < v.size();i++) {
object o = new object();
o = v.elementat(i);
}
}
}
:
,
import java.util.vector;
public class loop {
void method (vector v) {
object o;
for (int i=0;i<v.size();i++) {
o = v.elementat(i);
}
}
}
、 stringbuffer
stringbuffer ( 16) 。 , , , , , 。 , stringbuffer , , 。
:
public class rsbc {
void method () {
stringbuffer buffer = new stringbuffer(); // violation
buffer.append ("hello");
}
}
:
stringbuffer 。
public class rsbc {
void method () {
stringbuffer buffer = new stringbuffer(max);
buffer.append ("hello");
}
private final int max = 100;
}
:
dov bulka, "java performance and scalability volume 1: server-side programming
techniques" addison wesley, isbn: 0-201-70429-3 p.30 – 31
、
, 。static? local? ? 2-3 。
:
public class usv {
void getsum (int[] values) {
for (int i=0; i < value.length; i++) {
_sum += value[i]; // violation.
}
}
void getsum2 (int[] values) {
for (int i=0; i < value.length; i++) {
_staticsum += value[i];
}
}
private int _sum;
private static int _staticsum;
}
:
, 。
getsum() :
void getsum (int[] values) {
int sum = _sum; // temporary local variable.
for (int i=0; i < value.length; i++) {
sum += value[i];
}
_sum = sum;
}
:
peter haggar: "practical java - programming language guide".
addison wesley, 2000, pp.122 – 125
、 (!)
(!) , 。
:
public class dun {
boolean method (boolean a, boolean b) {
if (!a)
return !a;
else
return !b;
}
}
:
(!)
、 instanceof
, , 。 , instanceof , 。
:
public class insof {
private void method (object o) {
if (o instanceof interfacebase) { } // better
if (o instanceof classbase) { } // worse.
}
}
class classbase {}
interface interfacebase {}
:
graig larman, rhett guthrie: "java 2 performance and idiom guide"
prentice hall ptr, 2000. pp.207
17:26
(26)
(0)
: java
2010-05-12
Java
:Java
:http://blog.csdn.net/kome2000/archive/2010/04/28/5537591.aspx
[size=small] JAVA , JAVA , 。 , 。
1. final 。
final 。 JAVA API , final , java.lang.String。 String final length() 。 , final , final 。java (inline) final ( )。 50%。
2. 。
String , StringBuffer , , 。 。
3. 。
(Stack) , 。 , , , (Heap) , 。
4. 。
, ,java , null, 0,float double 0.0, false。 , , new , 。
, , initXXX() , ,public int state = this.getState();
5. java+Oracle ,java SQL , Oracle 。
6.java , ,I/O , , 。 。
7. , , , , 。
JVM GC , , null。
8. , 。
9. 。
for(int i=0;i<list.size();i++)
for(int i=0,len=list.size();i<len;i++)
10. 。
:
String str="abc";
if(i==1){ list.add(str);}
:
if(i==1){String str="abc"; list.add(str);}
11. , 。
。Throwable fillInStackTrace() ,fillInStackTrace() , 。 ,VM , 。
, 。
12. Try/Catch , Try/Catch 。
Error , 。 Exception , Exception , Error 。
13. StringBuffer , 。
StringBuffer 16, StringBuffer , 2 +2, 2*n+2。 , StringBuffer , , , 。 StringBuffer , !
14. java.util.Vector。
Vector StringBuffer , , 。Vector 10 , 。
vector.add(index,obj) obj index , index ( 1)。 , 。
remove(int index) , 。 ( 1)。 。 vector 1 。 removeAllElements() 。
vector vector.remove(obj); , , int index = indexOf(obj);vector.remove(index);
15. , System.arraycopy();
16. , 。
17. new 。
new , 。 Cloneable , clone() 。clone() 。
Factory 。
public static Credit getNewCredit()
{
return new Credit();
}
clone() ,
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit()
{
return (Credit)BaseCredit.clone();
}
18. , , , , 。
19. :public static final。
20.HaspMap 。
Map<String, String[]> paraMap = new HashMap<String, String[]>();
for( Entry<String, String[]> entry : paraMap.entrySet() )
{
String appFieldDefId = entry.getKey();
String[] values = entry.getValue();
}
Entry , entry key value。
21.array( ) ArrayList 。
array , , ,ArrayList , 。
22. HashMap, ArrayList, , HashTable,Vector, , 。
23.StringBuffer,StringBuilder :java.lang.StringBuffer 。 String , 。StringBuilder , StringBuilder , , , 。 , StringBuffer StringBuilder 。 16 。
, StringBuilder StringBuffer 10%~15% , 。 StringBuffer。
24. 。
25. , 。
26. , , IDE 。
27. ,
, 。 , 。 , , 。
28. GET,SET 。
android , , 。 get,set , , 。
29. , 。
30. , 10 。
31.SQLite , 30-50MS, , , ! [/size][align=left][/align]
16:39
(27)
(0)
: java
2010-05-12
《java 》
:Java
:http://jiangzhengjun.javaeye.com/blog/652623
1.
i % 2 == 1 , i , i % 2 != 0 ,
(i & 1) != 0 。
2.
System.out.println(2.00 -1.10);//0.8999999999999999
0.9, 。 1.1 double,
double , 2 , 0.9 double 。
, 。
, 1.0 10 。
( ) :
System.out.println(200-110);//90
BigDecimal, BigDecimal(String) , BigDecimal(double) ( float double String BigDecimal(String) , float double String )。
new BigDecimal(0.1),
BigDecimal,
0.1000000000000000055511151231257827021181583404541015625,
BigDecimal,
0.9:
System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9
, , BigDecimal compareTo 。
3. int
:
long microsPerDay = 24 * 60 * 60 * 1000 * 1000;// :86400000000
System.out.println(microsPerDay);// :500654080
。 int , , long, : 。
long , long , :
long microsPerDay = 24L * 60 * 60 * 1000 * 1000;
4.
“ ” int , , “2147483648”、“0x180000000( , 33 , )” , int , long “2147483648L”“0x180000000L”。
, , ,
“-” 。
, , :
1, :
System.out.println(0x80);//128
//0x81 int , ( 32 ) 0,
System.out.println(0x81);//129
System.out.println(0x8001);//32769
System.out.println(0x70000001);//1879048193
// 0x80000001 int , ( 32 ) 1,
System.out.println(0x80000001);//-2147483647
// 0x80000001L long , ( 64 ) 0,
System.out.println(0x80000001L);//2147483649
// int
System.out.println(0x80000000);//-2147483648
// 32 , L long,
System.out.println(0x8000000000000000L);//-9223372036854775808
, int , 32 , “L”, 。 32, int , 32 , long , long。
System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));// cafebabe
0x1cafebabe? : long , int 。 ,Java int long , long 。 int , 。
0xcafebabe 32 , long 0xffffffffcafebabeL,
0x100000000L。 int , 32 -1, 32 1,
0:
0x 0xffffffffcafebabeL
+0x 0000000100000000L
-----------------------------
0x 00000000cafebabeL
0x1cafebabe, “L” long ,
0:
System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL));// 1cafebabe
5.
System.out.println((int)(char)(byte)-1);// 65535
65535 -1?
: , (
1, 1, , 0); char, , 。
, : byte , byte -1( :11111111)
char , , 1, 8 1, 16 1; char int ,
char , , int 65535。
char c , , ,
:
int i = c & 0xffff;// :int i = c ;
char c , , char short,
char , :
int i = (short)c;
byte b char, , :
char c = (char)(b & 0xff);// char c = (char) b;
[size=medium]
6. ((byte)0x90 == 0x90)?
[/size]
, , false。 byte (byte)0x90 int 0x90,Java
byte int, int 。 byte ,
, byte int (10010000111111111111111111111111 10010000)。 , (byte)0x90 int -112, int 0x90, +144。
: , byte int。
((byte)0x90 & 0xff)== 0x90
7. (?:)
char x = 'X';
int i = 0;
System.out.println(true ? x : 0);// X
System.out.println(false ? i : x);// 88
:
(1) , 。
(2) T,T byte、short char, int “ ”,
T , T。
(3) , , 。
, : char,
0 int , 0 char, char ; : i int
, x char , x int , int , i final ,
char, , final “ 0”
:
final int i = 0;
System.out.println(false ? i : x);// X
JDK1.4 , ?: , ,
, :
public class T {
public static void main(String[] args) {
System.out.println(f());
}
public static T f() {
// !!1.4 , 1.5
// !!return true?new T1():new T2();
return true ? (T) new T1() : new T2();// T1
}
}
class T1 extends T {
public String toString() {
return "T1";
}
}
class T2 extends T {
public String toString() {
return "T2";
}
}
5.0 , 。
。 , Object , T, 。
JAVA , JAVA , 。 , 。
1. final 。
final 。 JAVA API , final , java.lang.String。 String final length() 。 , final , final 。java (inline) final ( )。 50%。
2. 。
String , StringBuffer , , 。 。
3. 。
(Stack) , 。 , , , (Heap) , 。
4. 。
, ,java , null, 0,float double 0.0, false。 , , new , 。
, , initXXX() , ,public int state = this.getState();
5. java+Oracle ,java SQL , Oracle 。
6.java , ,I/O , , 。 。
7. , , , , 。
JVM GC , , null。
8. , 。
9. 。
Java
for(int i=0;i<list.size();i++)
Java
for(int i=0,len=list.size();i<len;i++)
10. 。
:
Java
String str="abc";
if(i==1){ list.add(str);}
:
Java
if(i==1){String str="abc"; list.add(str);}
11. , 。
。Throwable fillInStackTrace() ,fillInStackTrace() , 。 ,VM , 。
, 。
12. Try/Catch , Try/Catch 。
Error , 。 Exception , Exception , Error 。
13. StringBuffer , 。
StringBuffer 16, StringBuffer , 2 +2, 2*n+2。 , StringBuffer , , , 。 StringBuffer , !
14. java.util.Vector。
Vector StringBuffer , , 。Vector 10 , 。
vector.add(index,obj) obj index , index ( 1)。 , 。
remove(int index) , 。 ( 1)。 。 vector 1 。 removeAllElements() 。
vector vector.remove(obj); , , int index = indexOf(obj);vector.remove(index);
15. , System.arraycopy();
16. , 。
17. new 。
new , 。 Cloneable , clone() 。clone() 。
Factory 。
Java
public static Credit getNewCredit()
{
return new Credit();
}
clone() ,
Java
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit()
{
return (Credit)BaseCredit.clone();
}
18. , , , , 。
19. :public static final。
20.HaspMap 。
Java
Map<String, String[]> paraMap = new HashMap<String, String[]>();
for( Entry<String, String[]> entry : paraMap.entrySet() )
{
String appFieldDefId = entry.getKey();
String[] values = entry.getValue();
}
Entry , entry key value。
21.array( ) ArrayList 。
array , , ,ArrayList , 。
22. HashMap, ArrayList, , HashTable,Vector, , 。
23.StringBuffer,StringBuilder :java.lang.StringBuffer 。 String , 。StringBuilder , StringBuilder , , , 。 , StringBuffer StringBuilder 。 16 。
, StringBuilder StringBuffer 10%~15% , 。 StringBuffer。
24. 。
25. , 。
26. , , IDE 。
27. ,
, 。 , 。 , , 。
28. GET,SET 。
android , , 。 get,set , , 。
29. , 。
30. , 10 。
31.SQLite , 30-50MS, , , !