diff --git a/src/google/protobuf/compiler/java/java_message.cc b/src/google/protobuf/compiler/java/java_message.cc
index 4c087db5..658b9181 100644
--- a/src/google/protobuf/compiler/java/java_message.cc
+++ b/src/google/protobuf/compiler/java/java_message.cc
@@ -303,14 +303,14 @@ void MessageGenerator::Generate(io::Printer* printer) {
       printer->Print(
         "public $static$ final class $classname$ extends\n"
         "    com.google.protobuf.GeneratedMessage.ExtendableMessage<\n"
-        "      $classname$> implements $classname$OrBuilder {\n",
+        "      $classname$> implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedOutputStream.ByteBufGeneratedMessage {\n",
         "static", is_own_file ? "" : "static",
         "classname", descriptor_->name());
     } else {
       printer->Print(
         "public $static$ final class $classname$ extends\n"
         "    com.google.protobuf.GeneratedMessageLite.ExtendableMessage<\n"
-        "      $classname$> implements $classname$OrBuilder {\n",
+        "      $classname$> implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedOutputStream.ByteBufGeneratedMessage  {\n",
         "static", is_own_file ? "" : "static",
         "classname", descriptor_->name());
     }
@@ -319,27 +319,61 @@ void MessageGenerator::Generate(io::Printer* printer) {
       printer->Print(
         "public $static$ final class $classname$ extends\n"
         "    com.google.protobuf.GeneratedMessage\n"
-        "    implements $classname$OrBuilder {\n",
+        "    implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedOutputStream.ByteBufGeneratedMessage  {\n",
         "static", is_own_file ? "" : "static",
         "classname", descriptor_->name());
     } else {
       printer->Print(
         "public $static$ final class $classname$ extends\n"
         "    com.google.protobuf.GeneratedMessageLite\n"
-        "    implements $classname$OrBuilder {\n",
+        "    implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedOutputStream.ByteBufGeneratedMessage  {\n",
         "static", is_own_file ? "" : "static",
         "classname", descriptor_->name());
     }
   }
+
+  // Integers for bit fields.
+  int totalBits = 0;
+  for (int i = 0; i < descriptor_->field_count(); i++) {
+    totalBits += field_generators_.get(descriptor_->field(i))
+        .GetNumBitsForMessage();
+  }
+  int totalInts = (totalBits + 31) / 32;
+
   printer->Indent();
   printer->Print(
     "// Use $classname$.newBuilder() to construct.\n"
-    "private $classname$(Builder builder) {\n"
-    "  super(builder);\n"
+    "private final io.netty.util.Recycler.Handle<$classname$> handle;\n"
+    "private $classname$(io.netty.util.Recycler.Handle<$classname$> handle) {\n"
+    "  this.handle = handle;\n"
     "}\n"
+    "\n"
+    " private static final io.netty.util.Recycler<$classname$> RECYCLER = new io.netty.util.Recycler<$classname$>() {\n"
+  "        protected $classname$ newObject(Handle<$classname$> handle) {\n"
+  "          return new $classname$(handle);\n"
+  "        }\n"
+  "      };\n"
+  "    \n"
+  "    public void recycle() {\n"
+  "        this.initFields();\n"
+  "        this.memoizedIsInitialized = -1;\n",
+    "classname", descriptor_->name());
+
+    for (int i = 0; i < totalInts; i++) {
+      printer->Print("        this.$bit_field_name$ = 0;\n",
+        "bit_field_name", GetBitFieldName(i));
+    }
+
+    printer->Print(
+  "        this.memoizedSerializedSize = -1;\n"
+  "        handle.recycle(this);\n"
+  "    }\n"
+   "     \n"
     // Used when constructing the default instance, which cannot be initialized
     // immediately because it may cyclically refer to other default instances.
-    "private $classname$(boolean noInit) {}\n"
+    "private $classname$(boolean noInit) {\n"
+    "    this.handle = null;\n"
+    "}\n"
     "\n"
     "private static final $classname$ defaultInstance;\n"
     "public static $classname$ getDefaultInstance() {\n"
@@ -365,13 +399,6 @@ void MessageGenerator::Generate(io::Printer* printer) {
     messageGenerator.Generate(printer);
   }
 
-  // Integers for bit fields.
-  int totalBits = 0;
-  for (int i = 0; i < descriptor_->field_count(); i++) {
-    totalBits += field_generators_.get(descriptor_->field(i))
-        .GetNumBitsForMessage();
-  }
-  int totalInts = (totalBits + 31) / 32;
   for (int i = 0; i < totalInts; i++) {
     printer->Print("private int $bit_field_name$;\n",
       "bit_field_name", GetBitFieldName(i));
@@ -450,7 +477,12 @@ GenerateMessageSerializationMethods(io::Printer* printer) {
        ExtensionRangeOrdering());
 
   printer->Print(
-    "public void writeTo(com.google.protobuf.CodedOutputStream output)\n"
+      "public void writeTo(com.google.protobuf.CodedOutputStream output)\n"
+      "                    throws java.io.IOException {\n"
+          "    throw new RuntimeException(\"Cannot use CodedOutputStream\");\n"
+          "}\n\n"
+
+    "public void writeTo(org.apache.pulsar.common.util.protobuf.ByteBufCodedOutputStream output)\n"
     "                    throws java.io.IOException {\n");
   printer->Indent();
   // writeTo(CodedOutputStream output) might be invoked without
@@ -567,14 +599,16 @@ GenerateParseFromMethods(io::Printer* printer) {
     "public static $classname$ parseFrom(\n"
     "    com.google.protobuf.ByteString data)\n"
     "    throws com.google.protobuf.InvalidProtocolBufferException {\n"
-    "  return newBuilder().mergeFrom(data).buildParsed();\n"
+    // "  return newBuilder().mergeFrom(data).buildParsed();\n"
+    "     throw new RuntimeException(\"Disabled\");\n"
     "}\n"
     "public static $classname$ parseFrom(\n"
     "    com.google.protobuf.ByteString data,\n"
     "    com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
     "    throws com.google.protobuf.InvalidProtocolBufferException {\n"
-    "  return newBuilder().mergeFrom(data, extensionRegistry)\n"
-    "           .buildParsed();\n"
+    // "  return newBuilder().mergeFrom(data, extensionRegistry)\n"
+    // "           .buildParsed();\n"
+    "     throw new RuntimeException(\"Disabled\");\n"
     "}\n"
     "public static $classname$ parseFrom(byte[] data)\n"
     "    throws com.google.protobuf.InvalidProtocolBufferException {\n"
@@ -674,13 +708,13 @@ void MessageGenerator::GenerateBuilder(io::Printer* printer) {
       printer->Print(
         "public static final class Builder extends\n"
         "    com.google.protobuf.GeneratedMessage.ExtendableBuilder<\n"
-        "      $classname$, Builder> implements $classname$OrBuilder {\n",
+        "      $classname$, Builder> implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedInputStream.ByteBufMessageBuilder  {\n",
         "classname", ClassName(descriptor_));
     } else {
       printer->Print(
         "public static final class Builder extends\n"
         "    com.google.protobuf.GeneratedMessageLite.ExtendableBuilder<\n"
-        "      $classname$, Builder> implements $classname$OrBuilder {\n",
+        "      $classname$, Builder> implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedInputStream.ByteBufMessageBuilder  {\n",
         "classname", ClassName(descriptor_));
     }
   } else {
@@ -688,14 +722,14 @@ void MessageGenerator::GenerateBuilder(io::Printer* printer) {
       printer->Print(
         "public static final class Builder extends\n"
         "    com.google.protobuf.GeneratedMessage.Builder<Builder>\n"
-         "   implements $classname$OrBuilder {\n",
+         "   implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedInputStream.ByteBufMessageBuilder {\n",
         "classname", ClassName(descriptor_));
     } else {
       printer->Print(
         "public static final class Builder extends\n"
         "    com.google.protobuf.GeneratedMessageLite.Builder<\n"
         "      $classname$, Builder>\n"
-        "    implements $classname$OrBuilder {\n",
+        "    implements $classname$OrBuilder, org.apache.pulsar.common.util.protobuf.ByteBufCodedInputStream.ByteBufMessageBuilder  {\n",
         "classname", ClassName(descriptor_));
     }
   }
@@ -760,9 +794,21 @@ void MessageGenerator::GenerateDescriptorMethods(io::Printer* printer) {
 void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
   printer->Print(
     "// Construct using $classname$.newBuilder()\n"
-    "private Builder() {\n"
+    "private final io.netty.util.Recycler.Handle<Builder> handle;\n"
+    "private Builder(io.netty.util.Recycler.Handle<Builder> handle) {\n"
+    "  this.handle = handle;\n"
     "  maybeForceBuilderInitialization();\n"
     "}\n"
+    "private final static io.netty.util.Recycler<Builder> RECYCLER = new io.netty.util.Recycler<Builder>() {\n"
+    "   protected Builder newObject(io.netty.util.Recycler.Handle<Builder> handle) {\n"
+    "         return new Builder(handle);\n"
+    "       }\n"
+    "      };\n"
+    "\n"
+    " public void recycle() {\n"
+    "          clear();\n"
+    "          handle.recycle(this);\n"
+    "      }\n"
     "\n",
     "classname", ClassName(descriptor_));
 
@@ -801,7 +847,8 @@ void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
 
   printer->Print(
     "private static Builder create() {\n"
-    "  return new Builder();\n"
+    "  return RECYCLER.get();\n"
+        // "  return new Builder(null);\n"
     "}\n"
     "\n"
     "public Builder clear() {\n"
@@ -864,7 +911,8 @@ void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
     "}\n"
     "\n"
     "public $classname$ buildPartial() {\n"
-    "  $classname$ result = new $classname$(this);\n",
+    "  $classname$ result = $classname$.RECYCLER.get();\n",
+        // "  $classname$ result = new $classname$(null);\n",
     "classname", ClassName(descriptor_));
 
   printer->Indent();
@@ -973,8 +1021,13 @@ void MessageGenerator::GenerateBuilderParsingMethods(io::Printer* printer) {
     SortFieldsByNumber(descriptor_));
 
   printer->Print(
+    "public Builder mergeFrom(com.google.protobuf.CodedInputStream input,\n"
+    "                        com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
+    "                        throws java.io.IOException {\n"
+    "   throw new java.io.IOException(\"Merge from CodedInputStream is disabled\");\n"
+    "                        }\n"
     "public Builder mergeFrom(\n"
-    "    com.google.protobuf.CodedInputStream input,\n"
+    "    org.apache.pulsar.common.util.protobuf.ByteBufCodedInputStream input,\n"
     "    com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n"
     "    throws java.io.IOException {\n");
   printer->Indent();
@@ -1017,7 +1070,7 @@ void MessageGenerator::GenerateBuilderParsingMethods(io::Printer* printer) {
       "  $on_changed$\n"
       "  return this;\n"
       "default: {\n"
-      "  if (!parseUnknownField(input, extensionRegistry, tag)) {\n"
+      "  if (!input.skipField(tag)) {\n"
       "    $on_changed$\n"
       "    return this;\n"   // it's an endgroup tag
       "  }\n"
diff --git a/src/google/protobuf/compiler/java/java_message_field.cc b/src/google/protobuf/compiler/java/java_message_field.cc
index 251945af..1212be9e 100644
--- a/src/google/protobuf/compiler/java/java_message_field.cc
+++ b/src/google/protobuf/compiler/java/java_message_field.cc
@@ -371,7 +371,8 @@ GenerateParsingCode(io::Printer* printer) const {
   }
 
   printer->Print(variables_,
-    "set$capitalized_name$(subBuilder.buildPartial());\n");
+    "set$capitalized_name$(subBuilder.buildPartial());\n"
+    "subBuilder.recycle();\n");
 }
 
 void MessageFieldGenerator::
diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc
index 91e6878e..cfee3832 100644
--- a/src/google/protobuf/message.cc
+++ b/src/google/protobuf/message.cc
@@ -32,6 +32,7 @@
 //  Based on original Protocol Buffers design by
 //  Sanjay Ghemawat, Jeff Dean, and others.
 
+#include <iostream>
 #include <stack>
 #include <google/protobuf/stubs/hash.h>
 
