aboutsummaryrefslogtreecommitdiffstats
path: root/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java
AgeCommit message (Collapse)Author
2014-11-25[jinterface] cleanup code according to new styleVlad Dumitrescu
2014-09-11silence 'potential resource leak' warningsVlad Dumitrescu
OtpInputStream and OtoOutputStream don't need closing (they are ByteArray*Streams)
2014-09-11don't warn about some unused fields/variablesVlad Dumitrescu
2014-09-11keep all method parameters finalVlad Dumitrescu
2014-09-11renamed method parameters hiding fieldsVlad Dumitrescu
2014-09-11remove unused variablesVlad Dumitrescu
2014-09-11removed unnecessary semicolons, imports, labelsVlad Dumitrescu
2014-06-08Fix a few javadoc errorsAnthony Ramine
Reported-by: Boris Mühmer
2014-02-11jinterface: implement support for mapsVlad Dumitrescu
The API and implementation are simplistic, like for lists and tuples, using arrays and without any connection to java.util.Map.
2013-02-13Merge branch 'nk/jinterface_dont_compress_if_size_increased/OTP-10822'Fredrik Gustafsson
* nk/jinterface_dont_compress_if_size_increased/OTP-10822: jinterface, OtpOutputStream: add a write_compressed(object, level) method jinterface: fix a memory leak jinterface: new limited OutputStream implementation without the need to resize jinterface: don't return compressed external term if bigger than uncompressed jinterface: don't compress small erlang terms < 5 bytes jinterface, OtpOutputStream: properly override the three write() methods to ensure our growth strategy jinterface: fix typo in error message if encoding fails jinterface: don't need another FilterOutputStream wrapper
2013-02-04jinterface, OtpOutputStream: add a write_compressed(object, level) methodNico Kruber
Now that we use an own deflater, we can also allow the user to specify the compression level as in Erlang's term_to_binary/2.
2013-02-04jinterface: fix a memory leakNico Kruber
after the first try to compress the value with a fixed buffer size, the deflater must be closed so that memory can be (instantly) reused
2013-02-04jinterface: new limited OutputStream implementation without the need to resizeNico Kruber
(saves memory re-allocations)
2013-02-04jinterface: don't return compressed external term if bigger than uncompressedNico Kruber
Now, OtpOutputStream#write_compressed() uses the same mechanism as erts_term_to_binary() in external.c: it tries to compress the given term into a buffer of the size of the uncompressed term and if this is not possible, i.e. the compression plus headers is bigger, it uses the uncompressed external term format instead.
2013-02-04jinterface: don't compress small erlang terms < 5 bytesNico Kruber
Compression always has at least 5 bytes (the compressed tag + original size) so we can't get a smaller external term if the original term is already smaller than 5 bytes.
2013-02-04jinterface, OtpOutputStream: properly override the three write() methods to ↵Nico Kruber
ensure our growth strategy Previously, if code called e.g. write(byte[] b, int off, int len), the growth strategy of the parent class ByteArrayOutputStream was used.
2013-02-04jinterface: fix typo in error message if encoding failsNico Kruber
2013-02-04jinterface: don't need another FilterOutputStream wrapperNico Kruber
DeflaterOutputStream is already an FilterOutputStream
2013-01-25Update copyright yearsBjörn-Egil Dahlberg
2013-01-16Implement UTF-8 atom support for jinterfaceRickard Green
2011-12-09Update copyright yearsBjörn-Egil Dahlberg
2011-12-09restore Java5 compatibilityNico Kruber
2011-12-09JInterface: improve OtpOutputStream buffer allocationNico Kruber
Previously, the buffer was increased linearly by 2048 bytes. I now propose to use an exponential increase function (similar to Javas ArrayList, e.g. always at least +50%). This significantly increases performance of e.g. doRPC for large parameters as the following comparison illustrates (shown is the buffer size after each time, the buffer has reached its limit): n n*2048 (n*3)/2+1 (n*3)/2+1 (at least +2048) 1 2,048 2,048 2,048 2 4,096 3,073 4,096 3 6,144 4,610 6,145 4 8,192 6,916 9,218 5 10,240 10,375 13,828 6 12,288 15,563 20,743 7 14,336 23,345 31,115 8 16,384 35,018 46,673 9 18,432 52,528 70,010 10 20,480 78,793 105,016 11 22,528 118,190 157,525 12 24,576 177,286 236,288 13 26,624 265,930 354,433 14 28,672 398,896 531,650 15 30,720 598,345 797,476 16 32,768 897,518 1,196,215 17 34,816 1,346,278 1,794,323 18 36,864 2,019,418 2,691,485 19 38,912 3,029,128 4,037,228 20 40,960 4,543,693 6,055,843 21 43,008 6,815,540 9,083,765 22 45,056 10,223,311 13,625,648 23 47,104 15,334,967 20,438,473 24 49,152 23,002,451 30,657,710 25 51,200 34,503,677 45,986,566 26 53,248 51,755,516 68,979,850 27 55,296 77,633,275 103,469,776 28 57,344 116,449,913 155,204,665 29 59,392 174,674,870 232,806,998 30 61,440 262,012,306 349,210,498 Actually, ArrayList uses the (n*3)/2+1 strategy. In order not to decrease performance for messages <10k, we could keep the (public) OtpOutputStream#defaultIncrement constant and let the buffer always increase by at least this much (third column). In order to create a buffer of 1MB, now only 16 array copies are needed vs. (1024*1024/2048)=512 array copies for the linear increase function. If a user sends a message of 10MB size, this is 22 vs. 5120 copies. NOTE: the meaning of the "public static final int defaultIncrement" member has changed a bit with this implementation (API compatibility?) - why was this public in the first place?
2009-11-20The R13B03 release.OTP_R13B03Erlang/OTP