Yes, kids, both your penisses are incredibly long. Now shut up and let the
grown-ups do some refactoring.
Greetings,
David
On 23.03.2012, at 04:47, Ximin Luo wrote:
> LOL, are you kidding me?
>
> Please point to the exact lines of code that results in "double-digit
> millisecond pauses"?
>
> Talk is cheap, show us some numbers.
>
> BTW, the "example" I gave is not real code, and contains no variable
> declarations, so your challenge makes no sense. Since you apparently didn't
> understand my implicit argument, here it is in more detail: a typical method
> that computes something simply for the purpose of logging it somewhere,
> usually
> only allocates local variables that are not stored anywhere in the long term.
> Escape analysis can turn these into stack allocations, saving GC overhead. (If
> they do use more long-term variables, they will need to be stored on the heap,
> but then GC doesn't need to clean these up anyway.)
>
> Why are you even looking at blog entries? Escape analysis has been around for
> years. http://hg.openjdk.java.net/jdk6/jdk6/hotspot/rev/357d4e2eb4dd
>
> On 23/03/12 02:06, Zlatin Balevsky wrote:
>> My claim is based on day-to-day observations of hundreds of JVMs under
>> various
>> load scenarios.
>>
>> Your claim that modern JVMs "do escape analysis" is worthless as it shows
>> that
>> you have merely read some blog posts, and even those you've read only
>> partially. Please point to the exact lines of code in hotspot or any other
>> modern jvm that will optimize the specific lazy evaluation example you
>> presented, together with the opto-assembly that their JITs produce. Failing
>> that, take your attitude elsewhere.
>>
>> On Thu, Mar 22, 2012 at 8:49 PM, Ximin Luo <infinity0 at gmx.com
>> <mailto:infinity0 at gmx.com>> wrote:
>>
>> The "drastically cleaner syntax" is a red herring. Most of the time when
>> you
>> are doing a complex calculation, you are not going to put it on one line
>> anyway. In such cases, the function you are using to do the calculation
>> might
>> as well be the toString() method of some object.
>>
>> Your claim of "double-digit millisecond" pauses is worthless without some
>> benchmarking and actual numbers. Modern JVMs do escape analysis to avoid
>> heap
>> allocation and this helps especially for transient computations like in
>> logging.
>>
>> On 22/03/12 21:59, Zlatin Balevsky wrote:
>>> Double-digit millisecond pauses are not nothing. They may be acceptable
>> right
>>> now but unless you can offer a drastically cleaner syntax Fred should stick
>>> with predicates as they are handled much better by the hotspot jit.
>>>
>>> On Mar 22, 2012 5:36 PM, "Ximin Luo" <infinity0 at gmx.com
>> <mailto:infinity0 at gmx.com>
>>> <mailto:infinity0 at gmx.com <mailto:infinity0 at gmx.com>>> wrote:
>>>
>>> Lazy evaluation is trivial.
>>>
>>> Log.info("{1} did {2}",
>>> new Object(){ public String toString() { return ITEM_1; } },
>>> new Object(){ public String toString() { return ITEM_2; } }
>>> );
>>>
>>> Garbage collection with short-lived objects costs next to nothing.
>>>
>>> On 22/03/12 21:15, Zlatin Balevsky wrote:
>>>> Constructing the logging strings is half of the problem. The amount of
>>> garbage
>>>> they will generate will result in significantly more time in garbage
>>> collection
>>>> pauses.
>>>>
>>>> Unless you figure out a way to mimic lazy evaluation you have to live
>>> with the
>>>> isLoggable predicates. varargs are not an option either because
>> they also
>>>> create garbage.
>>>>
>>>> On Mar 22, 2012 8:11 AM, "Marco Schulze" <marco.c.schulze at gmail.com
>> <mailto:marco.c.schulze at gmail.com>
>>> <mailto:marco.c.schulze at gmail.com <mailto:marco.c.schulze at
>>> gmail.com>>
>>>> <mailto:marco.c.schulze at gmail.com
>> <mailto:marco.c.schulze at gmail.com> <mailto:marco.c.schulze at gmail.com
>> <mailto:marco.c.schulze at gmail.com>>>> wrote:
>>>>
>>>>
>>>>
>>>> On 22-03-2012 08:50, Matthew Toseland wrote:
>>>>
>>>> On Wednesday 21 Mar 2012 21:18:37 Marco Schulze wrote:
>>>>
>>>> There are basically two big concerns regarding logging
>> in fred:
>>>>
>>>> - Readability and code clutter, which was my original
>>> questioning;
>>>> - Raw throughput, as raised by toad.
>>>>
>>>> Point 1 could mostly be solved by removing any traces of
>>> logMINOR and
>>>> logDEBUG on all but the few places where generating
>> messages
>>> to be
>>>> logged brings noticeable slowdown. That'd be enough, but,
>>> personally,
>>>> the mess that the logging backend is does warrant a
>> replacement.
>>>> According to toad, the current system needs
>> log{MINOR,DEBUG} to
>>>> function
>>>> in a timely manner. Based on this, I think we all agree a
>>>> replacement is
>>>> desirable.
>>>>
>>>> Logging has a few additional requirements:
>>>>
>>>> - Log rotation (possibly live);
>>>> - Reentrant;
>>>> - Per-class filtering;
>>>> - Specific information in log (class-name, for example).
>>>>
>>>> Now, _any_ library which fits would make me happy, as
>> long as
>>> they
>>>> agree
>>>> to two points:
>>>>
>>>> - Either lightweight or with optional features. Else, it
>>> would only
>>>> transfer bloat to freenet-ext.jar. For example: log2socket,
>>> config
>>>> management and multiple logging instances;
>>>> - Implementable in a few LoC. Specially, it shouldn't need
>>> specialized
>>>> Formatter and Writer.
>>>>
>>>> Plus, it should be fast.
>>>>
>>>> From the quick research I made (yep, too many lists):
>>>>
>>>> - SLF4J already fails on point one: it is simply a wrapper;
>>>> - The Java logging API fails on point two: specialized
>>> classes would
>>>> have to be written to deal with log rotation, per-class
>>> filtering and
>>>> formatting, plus a wrapper for Logger.{info,warning,...}()
>>> methods.
>>>> Exactly the same as a custom logger, with one more
>> dependency
>>> and using
>>>> more LoC;
>>>>
>>>> No dependancies, it's part of the JDK, isn't it?
>>>>
>>>> More classes need to be loaded at startup. It's just me
>> thinking too
>>> much.
>>>>
>>>>
>>>> However, if it's not a clearer/simpler API, it probably
>> doesn't make
>>>> much sense.
>>>>
>>>> - Log4J seems to fail on point one - it only lacks a button
>>> that brings
>>>> back the dead. It seems interesting, and I haven't dropped
>>> this yet.
>>>>
>>>> In either case (custom or external), log* would be
>> banished.
>>> Forever.
>>>>
>>>> I don't follow. You object to using a separate logs folder?
>>>>
>>>> log* == log{MINOR,DEBUG}, not the logs folder.
>>>> _________________________________________________
>>>> Devl mailing list
>>>> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>> <mailto:Devl at freenetproject.org <mailto:Devl at freenetproject.org>>
>>> <mailto:Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>> <mailto:Devl at freenetproject.org <mailto:Devl at freenetproject.org>>>
>>>> https://emu.freenetproject.__org/cgi-bin/mailman/listinfo/__devl
>>>> <https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Devl mailing list
>>>> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>> <mailto:Devl at freenetproject.org <mailto:Devl at freenetproject.org>>
>>>> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>>>
>>>
>>> --
>>> GPG: 4096R/5FBBDBCE
>>> https://github.com/infinity0
>>> https://bitbucket.org/infinity0
>>> https://launchpad.net/~infinity0 <https://launchpad.net/%7Einfinity0>
>>>
>>>
>>> _______________________________________________
>>> Devl mailing list
>>> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>> <mailto:Devl at freenetproject.org <mailto:Devl at freenetproject.org>>
>>> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>>>
>>>
>>>
>>> _______________________________________________
>>> Devl mailing list
>>> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>>> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>>
>>
>> --
>> GPG: 4096R/5FBBDBCE
>> https://github.com/infinity0
>> https://bitbucket.org/infinity0
>> https://launchpad.net/~infinity0 <https://launchpad.net/%7Einfinity0>
>>
>>
>> _______________________________________________
>> Devl mailing list
>> Devl at freenetproject.org <mailto:Devl at freenetproject.org>
>> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>>
>>
>>
>>
>> _______________________________________________
>> Devl mailing list
>> Devl at freenetproject.org
>> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>
>
> --
> GPG: 4096R/5FBBDBCE
> https://github.com/infinity0
> https://bitbucket.org/infinity0
> https://launchpad.net/~infinity0
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> https://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl