[
https://issues.apache.org/jira/browse/THRIFT-872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12915802#action_12915802
]
Dave Engberg commented on THRIFT-872:
-------------------------------------
Yes, if you look at the standard implementation of java.util.BitSet and
consider the extra object overhead in the runtime for BitSet+long[] vs.
boolean[] , you'll need a lot of fields in your struct before BitSet uses less
memory than a boolean[]. I.e. if I have a struct with 12 fields, the total
memory used by the JVM for boolean[12] will be less than the corresponding
BitSet with its reference to a long[1].
Inline, named int fields would use less memory than either, however.
> Add 'primitive' option to 'Java' code generator
> -----------------------------------------------
>
> Key: THRIFT-872
> URL: https://issues.apache.org/jira/browse/THRIFT-872
> Project: Thrift
> Issue Type: New Feature
> Components: Java - Compiler
> Affects Versions: 0.4
> Reporter: Dave Engberg
> Fix For: 0.6
>
> Attachments: java-primitive-872-v2.patch,
> java-primitive-872-v3.patch, java-primitive-872.patch
>
>
> I'm attaching a patch that modifies 0.4.0 to add a new 'primitive' compiler
> option to the Java code generator that will produce a style of code that
> reduces library dependencies for generated struct and service interfaces.
> This will make the generated code easier to use in some contexts and more
> compatible with generated code from prior Thrift releases.
> The 'primitive' option changes generated code in the following ways:
> * Removes dependencies on: BitSet, ByteBuffer, and the third-party
> org.slf4j.Logger*
> * The 'isset' vector is implemented via boolean[] instead of BitSet
> * The 'Iface' interface for service 'Foo' is moved from an inner class to
> top-level FooIface.jar (and replaced with dummy Foo.Iface which just extends
> FooIface)
> * 'binary' fields from the IDL are changed from ByteBuffer back to byte[]
> The patch also includes runtime support library changes:
> * Added writeBinary(byte[]) and readBytes() methods to TProtocol to read and
> write byte[] primitives
> * Added TBaseHelper.toString(byte[],StringBuilder)
> To use (e.g.): thrift -r --gen java:beans,primitive Foo.thrift
> Rationale:
> 1) The generated structures and services are more compatible with previous
> versions (in particular, v 0.2.0), requiring fewer code changes for existing
> projects upgrading to 0.4.0.
> 2) The generated POJO structures and service interfaces have a much lower
> external dependency "footprint", so may be used more easily in platforms and
> libraries. For example, the structure *.java files and the FooIface.java
> files may be used within restricted environments like GWT, which don't
> support java.nio.ByteBuffer, java.util.BitSet, or org.slf4j.*
> (http://www.projectpossibility.org/projects/word_prediction/gwt-linux-1.4.60/doc/html/jre.html)
> 3) In some contexts, 'binary' data fields may require fewer lines of code to
> juggle and serialize slightly faster.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.