Optimize memory footprint for generated protobuf code

The problem was that an overload of CodedOutputStream.newInstance
without size uses 4000 as a default value, thus allocating
a 4k-sized byte array.
At the same time the array remained effectively unused
in the most cases since it only used for storing data
for unknown fields.

Because such arrays are being created for each read of
protobuf message, during compilation of IntelliJ project
it was producing 25% of redundant memory traffic.

Of course these arrays were all in the young gen, but still
they have some effect on GC
This commit is contained in:
Denis Zharkov
2017-05-16 15:01:37 +03:00
parent 692840860e
commit 63c5d85cf4
6 changed files with 90 additions and 88 deletions
@@ -98,7 +98,7 @@ public final class JvmPackageTable {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -1040,7 +1040,7 @@ public final class JvmPackageTable {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -93,7 +93,7 @@ public final class JvmProtoBuf {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -351,7 +351,7 @@ public final class JvmProtoBuf {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -2155,7 +2155,7 @@ public final class JvmProtoBuf {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -2617,7 +2617,7 @@ public final class JvmProtoBuf {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {
@@ -3097,7 +3097,7 @@ public final class JvmProtoBuf {
org.jetbrains.kotlin.protobuf.ByteString.newOutput();
org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
unknownFieldsOutput);
unknownFieldsOutput, 1);
try {
boolean done = false;
while (!done) {