Skip to content

Conversation

@zapov
Copy link
Contributor

@zapov zapov commented Jan 22, 2016

Requires Mono/.NET for compilation.

Added @CompiledJson to MeasurementPOJO (alternative is to create another POJO referencing MeasurementPOJO)
Changed empty ctor on MeasurementRecord to public.

Results:

Benchmark Mode Cnt Score Error Units
DZoneReadPojoBoon.read10FromString thrpt 6 78491.365 ± 29262.098 ops/s
DZoneReadPojoDslJson.read10FromString thrpt 6 255100.183 ± 13913.517 ops/s
DZoneReadPojoGSON.read10FromString thrpt 6 121667.213 ± 26262.467 ops/s
DZoneReadPojoJackson.read10FromString thrpt 6 145797.860 ± 40340.347 ops/s
DZoneReadPojoJacksonAB.read10FromString thrpt 6 176709.197 ± 28909.546 ops/s
DZoneReadPojoJacksonJr.read10FromString thrpt 6 155634.482 ± 33556.527 ops/s
DZoneReadPojoJohnzon.read10FromString thrpt 6 63283.833 ± 11793.431 ops/s
DZoneReadPojoMoshi.read10FromString thrpt 6 66843.351 ± 15100.781 ops/s
Benchmark Mode Cnt Score Error Units
DZoneWriteBoon.write100kUsingStream thrpt 6 12.556 ± 2.872 ops/s
DZoneWriteDslJson.write100kUsingStream thrpt 6 73.004 ± 17.470 ops/s
DZoneWriteGSON.write100kUsingStream thrpt 6 4.796 ± 1.612 ops/s
DZoneWriteJackson.write100kUsingStream thrpt 6 41.553 ± 2.356 ops/s
DZoneWriteJacksonAB.write100kUsingStream thrpt 6 43.839 ± 10.611 ops/s
DZoneWriteJacksonJr.write100kUsingStream thrpt 6 32.052 ± 7.498 ops/s
DZoneWriteJohnzon.write100kUsingStream thrpt 6 15.352 ± 1.939 ops/s
DZoneWriteJsonIO.write100kUsingStream thrpt 6 7.397 ± 0.817 ops/s
DZoneWriteMoshi.write100kUsingStream thrpt 6 10.868 ± 2.244 ops/s

Requires Mono/.NET for compilation.

Added @CompiledJson to MeasurementPOJO (alternative is to create another POJO referencing MeasurementPOJO)
Changed empty ctor on MeasurementRecord to public.
@cowtowncoder
Copy link
Owner

@zapov Thank you for the contribution! Code looks clean enough; the only question I had was about reset, and thread-safety of JsonWriter (that is, whether it makes sense to reuse), but I don't know if that makes a big difference.

cowtowncoder added a commit that referenced this pull request Mar 13, 2016
Add DSL-JSON to bench.
@cowtowncoder cowtowncoder merged commit e37c02e into cowtowncoder:master Mar 13, 2016
@cowtowncoder
Copy link
Owner

@zapov Actually one question: how is Mono installed? (I have never developed Dotnet, so am not very familiar with tooling). That may be bit problematic, depending.

@zapov
Copy link
Contributor Author

zapov commented Mar 13, 2016

On Linux I usually do sudo apt-get install mono-complete
On Mac I download installer from http://www.mono-project.com/download/#download-mac

Btw. There is 0.9.6 which fixes some regresion so you should switch to that version

@cowtowncoder
Copy link
Owner

@zapov Ok, I finally went ahed and (re)installed mono. But maven does not seem to find the runtime, and I am not sure where it is supposed to be installed (there is no mono in my PATH and I assume there should be?)

@zapov
Copy link
Contributor Author

zapov commented Jul 12, 2016

Hm... you are on Mac?
When I used http://www.mono-project.com/download/#download-mac it installed on path
into /usr/local/bin

@cowtowncoder
Copy link
Owner

Hmmh. Yes, on mac (el capitano), but no I don't see it. Maybe I'll try running installer again... did not think it failed but I guess it must have had to.

@cowtowncoder
Copy link
Owner

No. Installer claims it succeeds, but I can't find anything related it seems.

@zapov
Copy link
Contributor Author

zapov commented Jul 12, 2016

I did saw something related.
http://stackoverflow.com/questions/32542535/mono-installed-on-mac-but-not-recognized-in-terminal/32547884

Someone claimed that reinstall worked after it created /usr/local/bin manually

But maybe it's good enough if you export path:
export PATH=$PATH:/Library/Frameworks/Mono.framework/Versions/Current/bin/

@cowtowncoder
Copy link
Owner

cowtowncoder commented Jul 12, 2016

Ah! Progress. I can install mono, but build now fails in an interesting new way:

An exception has occurred in the compiler (1.8.0_91). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.IllegalStateException: endPosTable already set

which seems odd... how can source manage to do this for what should be a quite stable javac version.

@cowtowncoder
Copy link
Owner

... and yet it works with second attempt, ensuring clean is part of Maven invocation. Ok. Better. :)

@zapov
Copy link
Contributor Author

zapov commented Jul 12, 2016

It looks like a Maven bug with annotation processor: http://stackoverflow.com/questions/36408706/java-lang-illegalstateexception-endpostable-already-set

I can reproduce it on my 1.8.66 with a maven compile command
Never noticed it before (always doing clean first) ;(

It's disappointing to hear so many issues with setup ;(
Some of it I can probably fix.

@cowtowncoder
Copy link
Owner

@zapov no sweat, not your fault. But as I said, problem occurred just once and now build succeeds. I hope I can reproduce it on the other machine (where I usually run my tests) as well.

@cowtowncoder
Copy link
Owner

And things work just fine on my other machine (with first try).

Next I'll need to modify README a bit, to move result info on project wiki (or more likely, description, and further links to separate test runs or something).
Would be nice to get some visualizations too eventually.

@zapov
Copy link
Contributor Author

zapov commented Jul 13, 2016

Couple of suggestions:

Emphasise stream instead of string results. Your readme had all results in strings.
Add a fotnote wheter library supports used target natively. Dsl-json is byte based unlike all other libs which are char based. I purposley omitted string and writer api.
I saw that jackson jr still is way ahead of others in map test. We are still missing something

@cowtowncoder
Copy link
Owner

Yes agreed, not sure why I added results for String variant (I think use of Strings for tests is an anti-pattern here). Jackson also has significant optimizations for byte case; most others libs do not as you say (even fast-json and Boon only uses Readers/String).

I included partial/initial results under results/, running locally, so would be interested to see if they are similar to what you see.

Explanation of libraries, features would be useful, eventually.
Obviously other POJOs (etc); DZone one was only used since I wanted to fix tests they had. But not sure what would be the best way to scale things. Maybe cut'n paste is fine for now.

As to jackson-jr I haven't had time to look any more into it; once I run map tests I'll see how numbers look. Handling by Jackson and jackson-jr should be very similar for this particular case, and so should the numbers be (jr has little bit simpler set up, but shouldn't matter too much).

@zapov
Copy link
Contributor Author

zapov commented Jul 13, 2016

On my Win laptop using Java 8.66

# Run complete. Total time: 00:07:40

Benchmark                                 Mode  Cnt     Score     Error  Units
DZoneReadPojoBoon.read1kFromStream       thrpt   25  1213,118 ?  19,420  ops/s
DZoneReadPojoDslJson.read1kFromStream    thrpt   25  3154,211 ? 112,603  ops/s
DZoneReadPojoFastjson.read1kFromStream   thrpt   25  1504,235 ?  52,218  ops/s
DZoneReadPojoGSON.read1kFromStream       thrpt   25  1117,571 ?  42,798  ops/s
DZoneReadPojoJackson.read1kFromStream    thrpt   25  1956,964 ?  37,329  ops/s
DZoneReadPojoJacksonAB.read1kFromStream  thrpt   25  2404,811 ?  38,124  ops/s
DZoneReadPojoJacksonJr.read1kFromStream  thrpt   25  1882,795 ? 156,859  ops/s
DZoneReadPojoJohnzon.read1kFromStream    thrpt   25   611,617 ?  10,455  ops/s
DZoneReadPojoMoshi.read1kFromStream      thrpt   25   926,191 ?  44,274  ops/s

# Run complete. Total time: 00:07:50

Benchmark                                Mode  Cnt     Score     Error  Units
DZoneWriteBoon.write1kUsingStream       thrpt   25  1908,650 ?  65,256  ops/s
DZoneWriteDslJson.write1kUsingStream    thrpt   25  9624,017 ? 430,023  ops/s
DZoneWriteFastjson.write1kUsingStream   thrpt   25  3130,978 ?  73,553  ops/s
DZoneWriteGSON.write1kUsingStream       thrpt   25   529,811 ?  35,081  ops/s
DZoneWriteJackson.write1kUsingStream    thrpt   25  3233,842 ? 159,541  ops/s
DZoneWriteJacksonAB.write1kUsingStream  thrpt   25  4382,368 ? 472,344  ops/s
DZoneWriteJacksonJr.write1kUsingStream  thrpt   25  3290,889 ?  71,799  ops/s
DZoneWriteJohnzon.write1kUsingStream    thrpt   25  1230,604 ?  18,280  ops/s
DZoneWriteJsonIO.write1kUsingStream     thrpt   25   746,669 ?  50,700  ops/s
DZoneWriteMoshi.write1kUsingStream      thrpt   25  1428,717 ?  14,895  ops/s

@cowtowncoder
Copy link
Owner

Oh. That would definitely be significant -- I don't see anything like that.

What are your settings for jmh run? Are you using at least 3 seconds of warmup per test (I think I use 5, but seems like 3 is enough)

@zapov
Copy link
Contributor Author

zapov commented Jul 13, 2016

I ran

java -Xmx256m -jar target/microbenchmarks.jar -wi 4 -i 5 -f 5 "._DZoneReadPojo._read1kFromStream"
java -Xmx256m -jar target/microbenchmarks.jar -wi 4 -i 5 -f 5 "._DZoneWrite._write1kUsingStream"

Our read results look the same?
Write results are similar enough to results on my Mac.
Whats so different on your side?

@cowtowncoder
Copy link
Owner

Ah! I was looking at error measurements, and NOT on throughput numbers -- so looked liked jackson-jr had super high throughput.

However, having said that, your error numbers look exceptionally high so something is going on.
I try to run my tests with as little anything else running at same time as possible.
And so typically error estimate is in range of less than 2% like:

Benchmark                                 Mode  Cnt     Score    Error  Units
DZoneReadPojoBoon.read1kFromStream       thrpt   45  1469.909 ±  9.855  ops/s
DZoneReadPojoDslJson.read1kFromStream    thrpt   45  3560.760 ± 84.895  ops/s
DZoneReadPojoFastjson.read1kFromStream   thrpt   45  1792.828 ±  8.163  ops/s
DZoneReadPojoGSON.read1kFromStream       thrpt   45  1380.143 ±  6.147  ops/s
DZoneReadPojoJackson.read1kFromStream    thrpt   45  2304.526 ± 11.493  ops/s
DZoneReadPojoJacksonAB.read1kFromStream  thrpt   45  2740.538 ± 14.262  ops/s
DZoneReadPojoJacksonJr.read1kFromStream  thrpt   45  2593.301 ± 42.845  ops/s
DZoneReadPojoJohnzon.read1kFromStream    thrpt   45   823.543 ±  7.089  ops/s
DZoneReadPojoMoshi.read1kFromStream      thrpt   45  1193.732 ±  7.847  ops/s

@zapov
Copy link
Contributor Author

zapov commented Jul 13, 2016

Well, I'm doing something else also ;) ... and I did reduce the number of runs from 9 to 5.
I gave you my numbers for reference only and most of them seem comparable.

I'm on laptop away from home... so can't give you better numbers ATM :(

@cowtowncoder
Copy link
Owner

@zapov that's fine, all I'm saying is that error margins are so big as to suggest maybe numbers might not be stable.

But, since they do look similar that's neither here nor there. So my initial reading ("jackson-jr 3x as fast as Jackson , wth?") was wrong.

@cowtowncoder
Copy link
Owner

Btw, impressive write performance by dsl-json, maybe there's something I could learn from it!
It used to be that libraries did not optimize writing (when I was working with XML, especially), and always seemed odd because it's often as important as reading. So it's good to see more libraries having good write perf too.

@zapov
Copy link
Contributor Author

zapov commented Jul 13, 2016

Did you try it with more runs and forks?
I suspect GC is probably kicking in and causing spikes.

Thanks. Hopefully there is ;)

@cowtowncoder
Copy link
Owner

Doh. Found out the problem wrt jackson-jr -- my fix only applied to POJO case but NOT the Map case where it actually matters. So now jr results are similar to regular Jackson, which is to be expected.

Seeing odd spike for Boon just for 1k case (but not 10 or 100k). Tried to add a call to Map.size(), just to make sure lazy construction isn't behind this, but didn't seem to matter much. Perhaps it'd be necessary to try actual access... but that can add non-trivial overhead. Perhaps it'd make sense for cases where size is above some threshold (like 100), since that would be amortized -- that is, for small Maps, overhead bigger (so skip), for bigger, insignificant.

@zapov
Copy link
Contributor Author

zapov commented Jul 14, 2016

Map size can be faked. HashCode cant. Try with that

@cowtowncoder
Copy link
Owner

Yes, but I really don't want hashCode() calculation for value Strings as that has major performance impact. Similarly traversal of contents is (if I recall correctly) somewhat garbage inducing... so all in all, it would seem rather costly.

Then again I guess it should be easy enough to see how much overhead we are talking about; if it's modest (<10%) perhaps it'd be worth it.

On the other hand, it seems like only Boon might be using lazy construction at this point, so there isn't much to resolve I think.

@zapov
Copy link
Contributor Author

zapov commented Jul 14, 2016

As stated earlier I'm more or less ok with the current setup. I commented that you should try consuming hashCode just to get a feeling of the performance difference.

When I tried to resolve this I also tried consuming size and various other properties, but most of that can be faked (well, even hashCode can be faked if you want to provide a different number that Java HashMap).

The only thing which worries me a little is that it's not an issue with hashCode, but rather that some internal Java optimizations which does a dead code elimination for the unused objects.
I guess in the end it just shows that even with JMH you can fall in all kind of traps ;)

@cowtowncoder
Copy link
Owner

FWTW calling hashCode() did not make much difference in general, or for Boon (unless I somehow managed to not get changed version to be used). Not sure if you have seen differences in results?

Perhaps it's some other optimization that matters; maybe just simple thing like first reading all elements before allocating Map or List, or using an alternative eager-implementation that incurs less setup overhead, more access. Or maybe related to input size; I recall that Boon always requires reads from full document.
Just odd that there's that performance spike for that implementation.

I agree that it's good to be alert to artifacts that are due to some edge case. So let's keep on discussing oddities we find.

@zapov
Copy link
Contributor Author

zapov commented Jul 15, 2016

My results with hashCode instead of size

# with size
# Run complete. Total time: 00:14:52

Benchmark                                Mode  Cnt     Score    Error  Units
DZoneReadMapBoon.read1kFromStream       thrpt   45  1299,269 ?  5,720  ops/s
DZoneReadMapDslJson.read1kFromStream    thrpt   45   981,961 ?  4,633  ops/s
DZoneReadMapFastjson.read1kFromStream   thrpt   45   605,809 ?  2,790  ops/s
DZoneReadMapGSON.read1kFromStream       thrpt   45   730,947 ?  5,521  ops/s
DZoneReadMapJackson.read1kFromStream    thrpt   45  1204,001 ? 25,435  ops/s
DZoneReadMapJacksonJr.read1kFromStream  thrpt   45  1147,712 ?  3,520  ops/s
DZoneReadMapJohnzon.read1kFromStream    thrpt   45   361,531 ?  1,285  ops/s
DZoneReadMapJsonIO.read1kFromStream     thrpt   45   159,147 ?  0,761  ops/s
DZoneReadMapJsonMoshi.read1kFromStream  thrpt   45   347,336 ?  1,440  ops/s
DZoneReadMapJsonParse.read1kFromStream  thrpt   45   368,052 ? 19,303  ops/s

# with hashcode
# Run complete. Total time: 00:15:00

Benchmark                                Mode  Cnt     Score    Error  Units
DZoneReadMapBoon.read1kFromStream       thrpt   45   581,818 ?  4,067  ops/s
DZoneReadMapDslJson.read1kFromStream    thrpt   45   828,550 ?  6,019  ops/s
DZoneReadMapFastjson.read1kFromStream   thrpt   45   548,218 ?  2,999  ops/s
DZoneReadMapGSON.read1kFromStream       thrpt   45   625,387 ? 20,630  ops/s
DZoneReadMapJackson.read1kFromStream    thrpt   45  1014,759 ?  4,587  ops/s
DZoneReadMapJacksonJr.read1kFromStream  thrpt   45   923,698 ? 15,294  ops/s
DZoneReadMapJohnzon.read1kFromStream    thrpt   45   299,637 ? 10,071  ops/s
DZoneReadMapJsonIO.read1kFromStream     thrpt   45   136,282 ?  3,276  ops/s
DZoneReadMapJsonMoshi.read1kFromStream  thrpt   45   284,283 ?  5,226  ops/s
DZoneReadMapJsonParse.read1kFromStream  thrpt   45   297,028 ?  3,536  ops/s

Ok, I'm think I don't have any issues with this anymore. I had issues because I recalled a lot of libraries having around the same time for w/wo hashcode. It seems that's not the case.
So it seems like a valid optimization on Jackson part.

I supose Boon has sweet spot for this size because it doesn't cause too much GC (which is the case for 100k) and it's not saturated by processing overhead (for 10).

@zapov
Copy link
Contributor Author

zapov commented Jul 15, 2016

Ouch. I noticed that previous run was done with Java 8.77 32bit ;(

Here is 8.66 64bit

# with size
# Run complete. Total time: 00:15:13

Benchmark                                Mode  Cnt     Score    Error  Units
DZoneReadMapBoon.read1kFromStream       thrpt   45  2326,121 ? 29,508  ops/s
DZoneReadMapDslJson.read1kFromStream    thrpt   45  1870,392 ? 32,685  ops/s
DZoneReadMapFastjson.read1kFromStream   thrpt   45  1497,396 ? 14,930  ops/s
DZoneReadMapGSON.read1kFromStream       thrpt   45  1196,977 ? 21,852  ops/s
DZoneReadMapJackson.read1kFromStream    thrpt   45  1937,236 ? 26,654  ops/s
DZoneReadMapJacksonJr.read1kFromStream  thrpt   45  1870,348 ? 90,716  ops/s
DZoneReadMapJohnzon.read1kFromStream    thrpt   45   660,477 ?  7,350  ops/s
DZoneReadMapJsonIO.read1kFromStream     thrpt   45   335,971 ? 16,451  ops/s
DZoneReadMapJsonMoshi.read1kFromStream  thrpt   45   721,073 ? 14,537  ops/s
DZoneReadMapJsonParse.read1kFromStream  thrpt   45   686,875 ?  5,853  ops/s

# with hashCode
# Run complete. Total time: 00:15:14

Benchmark                                Mode  Cnt     Score    Error  Units
DZoneReadMapBoon.read1kFromStream       thrpt   45  1000,911 ? 32,758  ops/s
DZoneReadMapDslJson.read1kFromStream    thrpt   45  1460,401 ? 22,695  ops/s
DZoneReadMapFastjson.read1kFromStream   thrpt   45  1208,076 ? 18,222  ops/s
DZoneReadMapGSON.read1kFromStream       thrpt   45   952,082 ? 13,881  ops/s
DZoneReadMapJackson.read1kFromStream    thrpt   45  1518,177 ? 57,485  ops/s
DZoneReadMapJacksonJr.read1kFromStream  thrpt   45  1611,273 ? 13,217  ops/s
DZoneReadMapJohnzon.read1kFromStream    thrpt   45   558,709 ? 68,859  ops/s
DZoneReadMapJsonIO.read1kFromStream     thrpt   45   344,045 ? 24,356  ops/s
DZoneReadMapJsonMoshi.read1kFromStream  thrpt   45   688,507 ?  4,555  ops/s
DZoneReadMapJsonParse.read1kFromStream  thrpt   45   591,328 ?  4,816  ops/s

The conclusion is the same (Boon probably doing lazy map, but whatever)...
hashCode has noticeable overhead, so it should be avoided.
I think I'll let you finish up this bench now ;)

@cowtowncoder
Copy link
Owner

Ok sounds good. I must have messed up my hashCode() run, and it not getting invoked -- I can see its effects there.

Now; if you wanted to do runs on your system(s) I wouldn't mind adding them under results; the more the merrier. Just need to think of best way to include all pertinent info. I tried adding some on one result file I have, although obviously some sort of automation would be better.

Regardless these would be raw data files, and it'd be good to have some sort of summary/summaries. Or, if anyone wants to write an article or blog post, I guess it's easier to pick and choose.

Another thing we could consider would be mailing list perhaps. I would be happy to share ownership of this project if that makes sense -- adding new tests and all. Sort of like JSON-specific derivative of jvm-serializers project? If I am the only author there is also the question of objectivity; and as much as I like seeing Jackson fare well, I'd rather that this test would be more generally useful. It helps me, but there aren't many solid tests and I would prefer there were some non-crappy tests that users could refer to.

If so, I wonder if any other somewhat neutral github org might like to host this project?

@zapov
Copy link
Contributor Author

zapov commented Jul 15, 2016

I don't think there is a need for my results (they are too similar to yours).
I can take a look at my faster deskop when I get back if they are much different, but I'm ok with any results which can be reproduced and have system info next to the results.

I think a good starting point is wrapping this up and getting some interest either through DZone or whatever. It will be easier to find contributors which are able to create nice graphs in html (not my area of expertise).

I think it's fine to stay within Github (there is also github.io although raw wiki might be enough).
I don't think there will be much objections to objectivity as long as you have external collaborators (you can add me as first one :D). Mailing list can be simulated through issues and it's much easier to maintain/monitor.

Yeah, distinctive data types (all primitives, non ASCII,... ) is a good roadmap. I also have my own JSON bench: https://github.com/ngs-doo/json-benchmark but it does some things differently.

Personally I think people are much more interested in Android these days...

@cowtowncoder
Copy link
Owner

Having test runs on Android, using a reasonable benchmark would be great. Most test I have seen have suffered from one or more of basic mistakes. Not sure if there's something similar to jmh (as I assume jmh itself wouldn't work on dalvik).

@zapov
Copy link
Contributor Author

zapov commented Jul 29, 2016

I think Android is a different use case, since people are often interested how well does a serialization works the first time, not after warm-up.

For example, one of the apps my client is currently writing is doing one large deserialization at startup.
And it took like 30s with Jackson and 10s with DSL-JSON (those were numbers for worst case scenario).

Those kind of use cases are the reason various compile time databindings for Jackson exists.

Anyway... are you anywhere near the state of giving DZone their article back? Eg, are you missing only graph in Wiki or plan on doing a lot more work?

btw. early this year I investigated report for performance issue compared to Jackson which turned out was due to Jackson doing triplets for processing ints, while DSL-JSON was doing diplets. The idea that it's faster to process number in chunks of three is the only thing I took from Jackson :/ I'm sorry now that I didn't include that info in my commit message, but any other code similarity is purely non-related to Jackson codebase.

@cowtowncoder
Copy link
Owner

Yes, one-off usage is sort of interesting in context of Android. Not sure how that should be tackled; I assume measurements really need to be run on Dalvik for that part. Would be interested in those; jackson-jr would have lower one-off overhead than Jackson, as would probably about all libraries including Gson.:)

I think changes themselves are fine. Not sure what to do with DZone; I guess I could blog about that. I don't know the authors, although I guess I could leave a comment or try emailing. Do you know people involved?

As to processing: no worries, regardless of whether inspiration was gained. I sometimes have a look around, try to learn; I try to give credit where applicable but to me Open Source implies that ideas should be allowed to cross-pollinate. Sometimes there is convergent evolution, we are after all working on same/similar problems, using similar techniques. :)

I have gotten some ideas from fastjson (speculative use of ordering for parsing), boon (forget the details, but it did lead me to optimize whitespace handling as their test included whitespace; ditto for char input). dsl-json has interesting parts too, pretty aggressive optimization for names by hash (wasn't sure if collision could occur tho), and nice composition on output. I have tried to think of whether there's a way to "attach" quotes, separators, to names on output, but no progress there (yet?).

@zapov
Copy link
Contributor Author

zapov commented Jul 30, 2016

I think this: https://www.infoq.com/news/2014/05/jackson-founder-responds was my rationale on how to contact the DZone, but I see now that thats InfoQ :D
Yeah, emailing sounds good, I'm sure those kind of websites love when they have an article written by an expert. And you can even explain the importance of impartial benchmarking by expressing the idea of turning this repository into a community project/changing ownership :)
I don't have their contacts, so no help from me :(

If you are interested in overhead of name hashing optimization, you can "disable" that optimization with this: https://github.com/ngs-doo/dsl-json/blob/master/examples/Maven/src/main/java/com/dslplatform/maven/Example.java#L20

I actually never tried that :D but I would assume it's not that much. My takeaway from writing fast code in .NET and JVM is to avoid creating garbage and minimize unexpected branching. Everything else comes second :/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants