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]>



Reply via email to