Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #28649
| From | Robert Klemme <shortcutter@googlemail.com> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: NIO not so hot |
| Date | 2014-06-03 23:07 +0200 |
| Message-ID | <bv6rp4Fo0ubU1@mid.individual.net> (permalink) |
| References | <t24en9putph3mbnulkveghdjbrnisp105h@4ax.com> <0f77f8c8-374b-4c3a-a915-2beda6b3e74e@googlegroups.com> <bv0cp7FcakkU1@mid.individual.net> <381a1ea5-0bc9-49b8-ae42-56145f4870c9@googlegroups.com> |
A remark upfront: Google Groups really screws up line breaks. Can you please use a different text type or even a proper news reader? On 02.06.2014 16:37, Rupert Smith wrote: > On Sunday, June 1, 2014 11:15:01 AM UTC+1, Robert Klemme wrote: >> On 31.05.2014 11:29, Rupert Smith wrote: >> >>> Try using a direct byte buffer which has been pre-allocated. Direct >>> buffers are allocated outside the Java heap (using malloc()?), so the >>> allocation cost is high. They only really provide a performance boost >>> when re-used. >> >> That of course depends on the usage scenario, e.g. the frequency of >> allocation etc. If you serve long lasting connections the cost of >> allocating and freeing a DirectByteBuffer is negligible and other >> reasons may gain more weight in the decision to use a direct or heap >> buffer (e.g. whether access to the byte[] can make things faster as I >> assume is the case in my decoding tests posted upthread). > > The allocation cost is unfortunately not negligable. This is not what I said. > Allocation cost within the heap is very low, because it is easy to > do. Outside the heap with a malloc() type algorithm can be > considerably slower, because free blocks may need to be searched > for. All true, but I did not question that at all. >>> Also, if you dig into the internals you will find that a heap buffer >>> reading a file or socket will copy bytes from a direct buffer anyway, >>> and that Java does its own internal pooling/re-allocation of direct >>> buffers. >> >> Can you point me to more information about this? Or are you referring >> to OpenJDK's source code? > > Yes, I looked in the OpenJDK source code. You don't have to dig too > far under socket.read() or socket.write() to find it. Thank you! I'll have a look once I find the time. >>> Often benchmarks will say heap buffers are faster, because they >>> allocate buffer then read some data then allow buffer to be garbage >>> collected. >> >> I think heap byte buffers were faster in my tests (see upthread) not >> because of allocation and GC (this was not included in the time >> measurement) but rather because data would cross the boundary between >> non Java heap memory (where they arrive from the OS) to Java heap more >> infrequently because of the larger batches. If you have to fetch >> individual bytes from a ByteBuffer off Java heap you have to make the >> transition much more frequent. > > As I say, this does seem to have been optimized, although I admit I > am a little unsure as to exactly how. It was certainly the case in > 1.4 and maybe 1.5 that heap buffer array [] access was faster, and > get()/set() was slow. I have seen benchmarks and run my own > micro-benachmarks which suggest that get()/set() is now every bit as > fast as the array access. On a heap buffer, yes. In case I did not mention it: I tested with OpenJDK 7.55 64 bit. >>> I may be wrong but... are the byte get()/set() calls not trapped by >>> some compiler intrinsics and optimized away? >> >> DirectByteBuffer.get() contains a native call to fetch the byte - and I >> don't think the JIT will optimize away native calls. The JRE just does >> not have any insights into what JNI calls do. > > Exactly what I though, yet it does seem to be optimized. I don't think so. I think my test showed the exact opposite. If you believe differently please point out where exactly I am missing something. And / or present a test which proves your point. Cheers robert
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
NIO not so hot Roedy Green <see_website@mindprod.com.invalid> - 2014-05-17 04:28 -0700
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-18 13:38 +0200
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-18 13:38 +0200
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-18 14:12 +0200
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-18 19:09 +0200
Re: NIO not so hot Roedy Green <see_website@mindprod.com.invalid> - 2014-05-26 00:51 -0700
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-26 20:14 +0200
Re: NIO not so hot Roedy Green <see_website@mindprod.com.invalid> - 2014-05-26 01:15 -0700
Re: NIO not so hot Roedy Green <see_website@mindprod.com.invalid> - 2014-05-26 01:24 -0700
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-05-26 23:50 +0200
Re: NIO not so hot Rupert Smith <rupertlssmith@googlemail.com> - 2014-05-31 02:29 -0700
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-06-01 12:15 +0200
Re: NIO not so hot Rupert Smith <rupertlssmith@googlemail.com> - 2014-06-02 07:37 -0700
Re: NIO not so hot Robert Klemme <shortcutter@googlemail.com> - 2014-06-03 23:07 +0200
Re: NIO not so hot Rupert Smith <rupertlssmith@googlemail.com> - 2014-06-06 01:32 -0700
Re: NIO not so hot Rupert Smith <rupertlssmith@googlemail.com> - 2014-06-02 07:46 -0700
csiph-web