Преглед на файлове

A couple of optimizations:
* Using ArrayList instead of FastList with fixed initial size (there wont be any reallocation ever)
* Avoiding some garbage by reusing Env (whose internal parameters are the same) through all xxxTemplates (funcs/effects)

DrHouse преди 15 години
родител
ревизия
48016b1174
променени са 2 файла, в които са добавени 26 реда и са изтрити 19 реда
  1. 11 9
      L2_GameServer/java/com/l2jserver/gameserver/model/L2Effect.java
  2. 15 10
      L2_GameServer/java/com/l2jserver/gameserver/model/L2Skill.java

+ 11 - 9
L2_GameServer/java/com/l2jserver/gameserver/model/L2Effect.java

@@ -14,7 +14,7 @@
  */
 package com.l2jserver.gameserver.model;
 
-import java.util.List;
+import java.util.ArrayList;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
@@ -42,8 +42,6 @@ import com.l2jserver.gameserver.templates.effects.EffectTemplate;
 import com.l2jserver.gameserver.templates.skills.L2EffectType;
 import com.l2jserver.gameserver.templates.skills.L2SkillType;
 
-import javolution.util.FastList;
-
 /**
  * This class ...
  *
@@ -563,19 +561,23 @@ public abstract class L2Effect
 	{
 		if (_funcTemplates == null)
 			return _emptyFunctionSet;
-		List<Func> funcs = new FastList<Func>();
+		ArrayList<Func> funcs = new ArrayList<Func>(_funcTemplates.length);
+		
+		Env env = new Env();
+		env.player = getEffector();
+		env.target = getEffected();
+		env.skill = getSkill();
+		Func f;
+		
 		for (FuncTemplate t : _funcTemplates)
 		{
-			Env env = new Env();
-			env.player = getEffector();
-			env.target = getEffected();
-			env.skill = getSkill();
-			Func f = t.getFunc(env, this); // effect is owner
+			f = t.getFunc(env, this); // effect is owner
 			if (f != null)
 				funcs.add(f);
 		}
 		if (funcs.isEmpty())
 			return _emptyFunctionSet;
+		
 		return funcs.toArray(new Func[funcs.size()]);
 	}
 	

+ 15 - 10
L2_GameServer/java/com/l2jserver/gameserver/model/L2Skill.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.model;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.logging.Logger;
@@ -2216,20 +2217,24 @@ public abstract class L2Skill implements IChanceSkillTrigger
 
     public final Func[] getStatFuncs(L2Effect effect, L2Character player)
     {
-        if (!(player instanceof L2Playable) && !(player instanceof L2Attackable))
+    	if (_funcTemplates == null)
         	return _emptyFunctionSet;
-        
-        if (_funcTemplates == null)
+    	
+    	if (!(player instanceof L2Playable) && !(player instanceof L2Attackable))
         	return _emptyFunctionSet;
         
-        List<Func> funcs = new FastList<Func>();
+        ArrayList<Func> funcs = new ArrayList<Func>(_funcTemplates.length);
+        
+        Env env = new Env();
+        env.player = player;
+        env.skill = this;
+        
+        Func f;
         
         for (FuncTemplate t : _funcTemplates)
         {
-            Env env = new Env();
-            env.player = player;
-            env.skill = this;
-            Func f = t.getFunc(env, this); // skill is owner
+            
+            f = t.getFunc(env, this); // skill is owner
             if (f != null)
             	funcs.add(f);
         }
@@ -2277,7 +2282,7 @@ public abstract class L2Skill implements IChanceSkillTrigger
             }
         }
             
-        List<L2Effect> effects = new FastList<L2Effect>();
+        ArrayList<L2Effect> effects = new ArrayList<L2Effect>(_effectTemplates.length);
 
         if (env == null)
         	env = new Env();
@@ -2354,7 +2359,7 @@ public abstract class L2Skill implements IChanceSkillTrigger
         }
 
 
-        List<L2Effect> effects = new FastList<L2Effect>();
+        ArrayList<L2Effect> effects = new ArrayList<L2Effect>(_effectTemplates.length);
         
         if (env == null)
         	env = new Env();