Alexey Petrenko wrote:
My two cents... :)

Put all the array size checking code in one place is a good idea. Code
reuse is always good idea.

But do not forget that Java has 2 problems here:
1. It can not inline methods or include code in java file
2. Method call is a long operation.
AFAIK, the final/static/private(i.e. non-overriddable) methods have chance to be inlined by JIT or so? (waiting for JIT guys correct me)

So huge number of additional method calls can significantly downgrade
the performance...
Performance is a complex issue, my rule of thumb is that without benchmarking and bottleneck identification, the performance optimization probably misses the target. Further, codes with good structure are easier to be optimized later, while duplicate codes are probably evil...

Probably VM JIT guys will correct me.

Anyway... I think that the best plays for such tool methods is a misc
module, not util.
Why does it matters in which module? I mean, does this related to performance?

SY, Alexey

2006/7/21, Andrew Zhang <[EMAIL PROTECTED]>:
Hi Vladimir,

I noticed the same problem is existing in many places of NIO module.

How about writing a utility function for array index exception check? like:

void assertArrayIndex(Object[] array, int offset, int length){
if(offset < 0 || length < 0 || (long)offset + (long)length > array.length
){
    throw new IndexOutOfBoundsException();
 }
}

How do you think about it? Any suggestions?

Thanks!
Best regards,


On 7/21/06, Paulex Yang (JIRA) <[EMAIL PROTECTED]> wrote:
>
>     [ http://issues.apache.org/jira/browse/HARMONY-932?page=all ]
>
> Paulex Yang closed HARMONY-932.
> -------------------------------
>
>    Estimated Complexity: Novice
>
> Verified by Vladimir.
>
> > [classlib][nio]java.nio.?hannel.DatagramChannel.read(ByteBuffer[] , int,
> Integer.MAX_VALUE) throws NotYetConnectedException while RI throws
> IndexOutOfBoundsException
> >
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >
> >                 Key: HARMONY-932
> > URL: http://issues.apache.org/jira/browse/HARMONY-932
> >             Project: Harmony
> >          Issue Type: Bug
> >          Components: Classlib
> >            Reporter: Vladimir Ivanov
> >         Assigned To: Paulex Yang
> >         Attachments: DatagramChannelImpl.patch
> >
> >
> > The Harmony methods java.nio.?hannel.DatagramChannel.read/write(ByteBuffer[] > , int, Integer.MAX_VALUE) throws NotYetConnectedException while RI throws
> IndexOutOfBoundsException.
> > ==================== test.java ======================
> > import java.nio.channels.*;
> > import java.nio.*;
> > public class test  {
> >     public static void main (String[] args) {
> >         try {
> >             DatagramChannel.open().read(new ByteBuffer[] {}, 2,
> Integer.MAX_VALUE);
> >         } catch (Exception e) {
> >             e.printStackTrace();
> >         }
> >         try {
> >             DatagramChannel.open().write(new ByteBuffer[] {}, 2,
> Integer.MAX_VALUE);
> >         } catch (Exception e) {
> >             e.printStackTrace();
> >         }
> >     }
> > }
> > =================================================
> > Output:
> > C:\tmp\tmp17>C:\jdk1.5.0_06\bin\java.exe -cp . -showversion test
> > java version "1.5.0_06"
> > Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> > Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> > java.lang.IndexOutOfBoundsException
> > at sun.nio.ch.DatagramChannelImpl.read(DatagramChannelImpl.java
> :366)
> >         at test.main(test.java:8)
> > java.lang.IndexOutOfBoundsException
> > at sun.nio.ch.DatagramChannelImpl.write(DatagramChannelImpl.java
> :429)
> >         at test.main(test.java:13)
> > C:\tmp\tmp17>C:\jrockit-jdk1.5.0-windows-ia32\bin\java.exe -cp .
> -showversion test
> > java version "1.5.0"
> > Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
> > BEA WebLogic JRockit(R) (build dra-38972-20041208-2001-win-ia32,
> R25.0.0-75, GC: System optimized over throughput (initial strategy
> singleparpar))
> > OutOfMemoryError
> > -------end of stacktrace
> > C:\tmp\tmp17>C:\harmony\trunk_0427\deploy\jdk\jre\bin\java.exe -cp .
> -showversion test
> > java version 1.5 (subset)
> > (c) Copyright 1991, 2006 The Apache Software Foundation or its
> licensors, as applicable.
> > java.nio.channels.NotYetConnectedException
> >         at
> org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> DatagramChannelImpl.java:567)
> >         at org.apache.harmony.nio.internal.DatagramChannelImpl.read(
> DatagramChannelImpl.java:387)
> >         at test.main(test.java:8)
> > java.nio.channels.NotYetConnectedException
> >         at
> org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> DatagramChannelImpl.java:567)
> > at org.apache.harmony.nio.internal.DatagramChannelImpl.write(
> DatagramChannelImpl.java:477)
> >         at test.main(test.java:13)
> >
> C:\tmp\tmp17>C:\harmony\drlvm\trunk\build\win_ia32_msvc_debug\deploy\jre\bin\ij
> -Dvm.assert_dialog=false -cp . -showversion test
> > Apache Harmony DRLVM HEAD-4807 (2006-05-02), Windows/ia32/msvc 1310,
> debug
> > java.nio.channels.NotYetConnectedException
> >         at
> org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> DatagramChannelImpl.java:567)
> >         at org.apache.harmony.nio.internal.DatagramChannelImpl.read(
> DatagramChannelImpl.java:387)
> >         at test.main(test.java:8)
> > java.nio.channels.NotYetConnectedException
> >         at
> org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> DatagramChannelImpl.java:567)
> > at org.apache.harmony.nio.internal.DatagramChannelImpl.write(
> DatagramChannelImpl.java:477)
> >         at test.main(test.java:13)
>
> --
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the administrators:
> http://issues.apache.org/jira/secure/Administrators.jspa
> -
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>


--
Andrew Zhang
China Software Development Lab, IBM






--
Paulex Yang
China Software Development Lab
IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to