Option 1) below looks better to me.

I will assume your sleuthing was correct, add it to the Lucene FAQ.

Here it is: http://www.jguru.com/forums/view.jsp?EID=1152237

Otis



--- Jamie M <[EMAIL PROTECTED]> wrote:
> 
> I agree entirely - the problem is with ibm's jitc, not
> lucene - I'm just not sure how likely, or how quickly,
> it would be for ibm to fix this jdk bug.
> 
> I've searched for details on ibm 1.3 jit bugs, and it
> seems like there are a few, and that the 'fixes' seem
> to be to disable jit for the class/method giving
> problems (there don't seem to be many cases of 'this
> will be fixed soon').
> 
> I've spent some time debugging this and narrowed this
> problem to a jit inlining problem with:
> org.apache.lucene.store.OutputStream#writeInt(int)
> 
> this method looks like:
>   public final void writeInt(int i) throws IOException
> {
>     writeByte((byte)(i >> 24));
>     writeByte((byte)(i >> 16));
>     writeByte((byte)(i >>  8));
>     writeByte((byte) i);
>   }
> 
> And I've come up with two workarounds for this problem
> under an ibm 1.3.1 jvm:
> 
> 1) disable jit compliation for this method by setting
> this environment variable:
> JITC_COMPILEOPT=SKIP{org/apache/lucene/store/OutputStream}{writeInt}
> 
> 2) change the method to explicitly inline the method
> calls:
>   public final void writeInt(int i) throws IOException
> {
>       
>     if (bufferPosition >= BUFFER_SIZE)
>       flush();
>     buffer[bufferPosition++] = (byte)(i >> 24);
> 
>     if (bufferPosition >= BUFFER_SIZE)
>       flush();
>     buffer[bufferPosition++] = (byte)(i >> 16);
> 
>     if (bufferPosition >= BUFFER_SIZE)
>       flush();
>     buffer[bufferPosition++] = (byte)(i >>  8);
> 
>     if (bufferPosition >= BUFFER_SIZE)
>       flush();
>     buffer[bufferPosition++] = (byte) i;
> 
>   }
> 
> I know thats ugly, and I know that this class didn't
> change when the .tis code changes were made.
> 
> I'll try and open a PMR for this.
> 
> regards,
> 
> jamie
> 
> --- Robert Engels <[EMAIL PROTECTED]> wrote:
> > Would the proper course not be to get IBM to produce
> > a patch for their JDK
> > to fix the JIT bug - I have to assume there are
> > other products where the JDK
> > bug will surface...
> > 
> > -----Original Message-----
> > From: Jamie M [mailto:[EMAIL PROTECTED]
> > Sent: Sunday, March 07, 2004 5:39 PM
> > To: Lucene Developers List
> > Subject: Re: New FieldSortedHitQueue uses Java 1.4
> > feature
> > 
> > 
> > Tim,
> > 
> > I think there are two issues with 1.4 which affect
> > java 1.3 compatability:
> > - this regexp stuff
> > - the recent .tis file related changes
> > (thread:
> >
>
http://www.mail-archive.com/[EMAIL PROTECTED]/msg04383.html,
> > bug:
> >
> http://issues.apache.org/bugzilla/show_bug.cgi?id=27408)
> > 
> > As you suggest, the regexp stuff can be worked
> > around,
> > making the code usable with a 1.3 jvm.  However, the
> > recent .tis related changes cause problems when used
> > with IBM's 1.3.1 JVM (with jit enabled, under
> > windows.. I've not tested other OSes) which means
> > you
> > can't build indexes (except tiny ones) using such a
> > jvm.
> > 
> > This doesn't appear to be Lucene's fault - it seems
> > to
> > be an IBM jdk bug, but annoyingly IBM still uses
> > 1.3.1
> > jvms in all its biggest java products (WebSphere
> > Application Developer 4 & 5, WebSphere Application
> > Server 4 & 5 (and WebSphere Portal etc which are
> > built
> > on top)) - v5.x of these products is the latest
> > version, and they have this problem with the .tis
> > related changes.  IBM has a big chunk of the java
> > market, so unfortunately IBM 1.3.1 jvms are
> > (surprisingly) widely used, certainly in larger
> > commercial environments.  And I'm not sure how
> > quickly
> > IBM would release a fix for its jvm.
> > 
> > So, if lucene 1.4 was released as 'java 1.3
> > compatible' then that will probably result in
> > ibm-product-using people reporting bugs relating to
> > building indexes. Maybe lucene 1.4 should no longer
> > officially support java 1.3.  Or, a workaround in
> > the
> > new .tis related code could be sought to preserve
> > (ibm) java 1.3 support.  Either way, I think this
> > issue may be more of a deciding factor in whether
> > lucene 1.4 should support java 1.3 or not.
> > 
> > My personal preference is that a workaround is found
> > for the ibm 1.3.1 bug, but I've not found one yet.
> > 
> > regards,
> > 
> > jamie
> > 
> > --- Tim Jones <[EMAIL PROTECTED]> wrote:
> > > Yes, generating the exception is more expensive
> > than
> > > applying the regular
> > > expression.  However, the code isn't run that
> > often
> > > (relatively) and the
> > > results are cached, so it shouldn't make a
> > > significant difference.
> > >
> > > Just to verify the numbers, I put together a small
> > > test.  I ran 100000
> > > iterations of integer, float and string values
> > > through the two methods:
> > >
> > > +-----------------------------------+
> > > | milliseconds to execute iteration |
> > > +-----------------------------------+
> > > | value type |  regex   | exception |
> > > +------------|----------|-----------+
> > > | integer    |  0.0484  | 0.0094    |
> > > | float      |  0.1641  | 0.311     |
> > > | string     |  0.1125  | 0.4796    |
> > > +------------+----------+-----------+
> > >
> > > The timing values were calculated by taking the
> > > total time and dividing by
> > > the number of iterations.  The only case where
> > using
> > > the exception method is
> > > better is if the values are integers (in which
> > case,
> > > no exception is thrown
> > > since integer is the first test).
> > >
> > > Profiling the program confirms the results (java
> > > -Xrunhprof:cpu=samples):
> > >
> > > CPU SAMPLES BEGIN (total = 299) Fri Mar 05
> > 08:18:27
> > > 2004
> > > rank   self  accum   count trace method
> > >    1 40.80% 40.80%     122    37
> > > java.lang.Throwable.fillInStackTrace
> > >    2  8.03% 48.83%      24    50
> > > java.lang.StringBuffer.<init>
> > >    3  7.02% 55.85%      21    51
> > > java.lang.StringBuffer.expandCapacity
> > >    4  3.01% 58.86%       9    49
> > > java.lang.StringBuffer.expandCapacity
> > >    5  2.68% 61.54%       8    41
> > > java.lang.NumberFormatException.forInputString
> > >    6  2.34% 63.88%       7    31
> > > java.util.regex.Pattern.matcher
> > > ...
> > >
> > > But, if this is the only code depending on java
> > 1.4,
> > > it seems like it would
> > > be better to remove it for better version
> > > compatibility.  Perhaps what would
> > > be best would be to have the code detect which
> > > version it's running under
> > > and act appropriately.
> > >
> > > Tim
> > >
> > >
> > > > From: Mario Ivankovits [mailto:[EMAIL PROTECTED]
> > > >
> > > > I dont know where and how often this piece of
> > code
> > > gets
> > > > called and how
> > > > often a wrong value will be passed, but to throw
> > > an exception
> > > > might be
> > > > more expensive.
> > > > Think of the stacktrace which needs to be
> > filled.
> > > >
> > > > Maybe the type of the term should then be cached
> > > (per field).
> > > >
> > > >
> > > > Mario
> > >
> > >
> >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> > > [EMAIL PROTECTED]
> > > For additional commands, e-mail:
> > > [EMAIL PROTECTED]
> > >
> > 
> > 
> > __________________________________
> > Do you Yahoo!?
> > Yahoo! Search - Find what youre looking for faster
> > http://search.yahoo.com
> > 
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > 
> > 
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > 
> 
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! Search - Find what you’re looking for faster
> http://search.yahoo.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to