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


Reply via email to