harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paulex Yang <paulex.y...@gmail.com>
Subject Re: Suggestion (was: Re: [jira] Closed: (HARMONY-932) [classlib][nio]java.nio.?hannel.DatagramChannel.read(ByteBuffer[] , int, Integer.MAX_VALUE) throws NotYetConnectedException while RI throws IndexOutOfBoundsException)
Date Fri, 21 Jul 2006 10:11:29 GMT
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 <zhanghuangzhu@gmail.com>:
>> 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) <jira@apache.org> 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: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message