Vincent Massol wrote: > Hi, > > I need your expert advice here. The Log4JLogger class is declared as a final > class. In my code, I use : > > Logger logger = new Log4JLogger( > Category.getInstance(targetName)); > > This is used in a generic method that is called to automatically log entries > and exits of methods, so it is executed every time there is a log to be made > for an entry/exit. It is thus called very often. > > I'd like to know if it has any performance issue. More specifically, I'd > like to know if the final keyword helps for performance (as it does for > final methods which are inlined) : I guess that even with the final keyword, > there is always a new object instanciated in memory ...
The final declaration does help alot. > So, I also guess that simply writing : > > Category category = Category.getInstance(targetName); > > would be more performant ? By a couple nano/pico seconds > Another solution would be to have a hashmap of all loggers and check in the > hashmap whether the logger for a given targetName already exist and then use > that logger if it does. However, the additional work (putting the instances > in the hash, possibly with synchronisation (argh!), then doing an "if" and > then fetching the logger from the hash) might overall be more costly that > instanciating a new object. Today's JREs are optimized to deal with small final classes. The garbage collection overhead for these objeccts is actually _less_ than the overhead of caching them. -- "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." - Benjamin Franklin -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>