diff --git a/src/com/google/doclava/AttrTagInfo.java b/src/com/google/doclava/AttrTagInfo.java
index 909cacf..04e5626 100644
--- a/src/com/google/doclava/AttrTagInfo.java
+++ b/src/com/google/doclava/AttrTagInfo.java
@@ -22,6 +22,12 @@
 import java.util.regex.Matcher;
 
 public class AttrTagInfo extends TagInfo {
+  public static final AttrTagInfo[] EMPTY_ARRAY = new AttrTagInfo[0];
+
+  public static AttrTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new AttrTagInfo[size];
+  }
+
   private static final String REF_COMMAND = "ref";
   private static final String NAME_COMMAND = "name";
   private static final String DESCRIPTION_COMMAND = "description";
diff --git a/src/com/google/doclava/CodeTagInfo.java b/src/com/google/doclava/CodeTagInfo.java
index 1a4a864..56ffd13 100644
--- a/src/com/google/doclava/CodeTagInfo.java
+++ b/src/com/google/doclava/CodeTagInfo.java
@@ -17,6 +17,12 @@
 package com.google.doclava;
 
 public class CodeTagInfo extends TagInfo {
+  public static final CodeTagInfo[] EMPTY_ARRAY = new CodeTagInfo[0];
+
+  public static CodeTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new CodeTagInfo[size];
+  }
+
   private static String encode(String t) {
     t = t.replace("&", "&amp;");
     t = t.replace("<", "&lt;");
diff --git a/src/com/google/doclava/Comment.java b/src/com/google/doclava/Comment.java
index cfb7aaf..33dee3c 100644
--- a/src/com/google/doclava/Comment.java
+++ b/src/com/google/doclava/Comment.java
@@ -19,12 +19,15 @@
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 public class Comment {
   static final Pattern FIRST_SENTENCE =
       Pattern.compile("((.*?)\\.)[ \t\r\n\\<](.*)", Pattern.DOTALL);
 
-  private static final String[] KNOWN_TAGS = new String[] {
+  private static final Set<String> KNOWN_TAGS = new HashSet<String>(Arrays.asList(new String[] {
           "@author",
           "@since",
           "@version",
@@ -38,7 +41,7 @@
           "@sample",
           "@include",
           "@serial",
-      };
+      }));
 
   public Comment(String text, ContainerInfo base, SourcePositionInfo sp) {
     mText = text;
@@ -296,7 +299,14 @@
   }
 
   private boolean isWhitespaceChar(char c) {
-      return c == ' ' || c == '\r' || c == '\t' || c == '\n';
+      switch (c) {
+          case ' ':
+          case '\r':
+          case '\t':
+          case '\n':
+              return true;
+      }
+      return false;
   }
 
   private void tag(String name, String text, boolean isInline, SourcePositionInfo pos) {
@@ -346,13 +356,7 @@
     } else if (name.equals("@include") || name.equals("@sample")) {
       mInlineTagsList.add(new SampleTagInfo(name, "@include", text, mBase, pos));
     } else {
-      boolean known = false;
-      for (String s : KNOWN_TAGS) {
-        if (s.equals(name)) {
-          known = true;
-          break;
-        }
-      }
+      boolean known = KNOWN_TAGS.contains(name);
       if (!known) {
         known = Doclava.knownTags.contains(name);
       }
@@ -416,7 +420,7 @@
         results.add(t);
       }
     }
-    return results.toArray(new TagInfo[results.size()]);
+    return results.toArray(TagInfo.getArray(results.size()));
   }
 
   public ParamTagInfo[] paramTags() {
@@ -516,18 +520,17 @@
     mText = null;
     mInitialized = true;
 
-    mInlineTags = mInlineTagsList.toArray(new TagInfo[mInlineTagsList.size()]);
-    mParamTags = mParamTagsList.toArray(new ParamTagInfo[mParamTagsList.size()]);
-    mSeeTags = mSeeTagsList.toArray(new SeeTagInfo[mSeeTagsList.size()]);
-    mThrowsTags = mThrowsTagsList.toArray(new ThrowsTagInfo[mThrowsTagsList.size()]);
-    mReturnTags =
-        ParsedTagInfo.joinTags(mReturnTagsList.toArray(new ParsedTagInfo[mReturnTagsList.size()]));
-    mDeprecatedTags =
-        ParsedTagInfo.joinTags(mDeprecatedTagsList.toArray(new ParsedTagInfo[mDeprecatedTagsList
-            .size()]));
-    mUndeprecateTags = mUndeprecateTagsList.toArray(new TagInfo[mUndeprecateTagsList.size()]);
-    mAttrTags = mAttrTagsList.toArray(new AttrTagInfo[mAttrTagsList.size()]);
-    mBriefTags = mBriefTagsList.toArray(new TagInfo[mBriefTagsList.size()]);
+    mInlineTags = mInlineTagsList.toArray(TagInfo.getArray(mInlineTagsList.size()));
+    mParamTags = mParamTagsList.toArray(ParamTagInfo.getArray(mParamTagsList.size()));
+    mSeeTags = mSeeTagsList.toArray(SeeTagInfo.getArray(mSeeTagsList.size()));
+    mThrowsTags = mThrowsTagsList.toArray(ThrowsTagInfo.getArray(mThrowsTagsList.size()));
+    mReturnTags = ParsedTagInfo.joinTags(
+        mReturnTagsList.toArray(ParsedTagInfo.getArray(mReturnTagsList.size())));
+    mDeprecatedTags = ParsedTagInfo.joinTags(
+        mDeprecatedTagsList.toArray(ParsedTagInfo.getArray(mDeprecatedTagsList.size())));
+    mUndeprecateTags = mUndeprecateTagsList.toArray(TagInfo.getArray(mUndeprecateTagsList.size()));
+    mAttrTags = mAttrTagsList.toArray(AttrTagInfo.getArray(mAttrTagsList.size()));
+    mBriefTags = mBriefTagsList.toArray(TagInfo.getArray(mBriefTagsList.size()));
 
     mParamTagsList = null;
     mSeeTagsList = null;
diff --git a/src/com/google/doclava/Converter.java b/src/com/google/doclava/Converter.java
index e620bf3..3153b41 100644
--- a/src/com/google/doclava/Converter.java
+++ b/src/com/google/doclava/Converter.java
@@ -107,12 +107,14 @@
     return (ClassInfo[]) mClasses.all();
   }
 
+  private static final MethodDoc[] EMPTY_METHOD_DOC = new MethodDoc[0];
+
   private static void initClass(ClassDoc c, ClassInfo cl) {
     MethodDoc[] annotationElements;
     if (c instanceof AnnotationTypeDoc) {
       annotationElements = ((AnnotationTypeDoc) c).elements();
     } else {
-      annotationElements = new MethodDoc[0];
+      annotationElements = EMPTY_METHOD_DOC;
     }
     cl.init(Converter.obtainType(c),
             new ArrayList<ClassInfo>(Arrays.asList(Converter.convertClasses(c.interfaces()))),
@@ -192,7 +194,7 @@
 
   public static TagInfo[] convertTags(Tag[] tags, ContainerInfo base) {
     int len = tags.length;
-    TagInfo[] out = new TagInfo[len];
+    TagInfo[] out = TagInfo.getArray(len);
     for (int i = 0; i < len; i++) {
       Tag t = tags[i];
       /*
diff --git a/src/com/google/doclava/LiteralTagInfo.java b/src/com/google/doclava/LiteralTagInfo.java
index 1feb276..e6b9115 100644
--- a/src/com/google/doclava/LiteralTagInfo.java
+++ b/src/com/google/doclava/LiteralTagInfo.java
@@ -17,6 +17,12 @@
 package com.google.doclava;
 
 public class LiteralTagInfo extends TagInfo {
+  public static final LiteralTagInfo[] EMPTY_ARRAY = new LiteralTagInfo[0];
+
+  public static LiteralTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new LiteralTagInfo[size];
+  }
+
   private static String encode(String t) {
     t = t.replace("&", "&amp;");
     t = t.replace("<", "&lt;");
diff --git a/src/com/google/doclava/MethodInfo.java b/src/com/google/doclava/MethodInfo.java
index f1659f3..cf98d0f 100644
--- a/src/com/google/doclava/MethodInfo.java
+++ b/src/com/google/doclava/MethodInfo.java
@@ -405,7 +405,8 @@
               containingClass(), position()));
         }
       }
-      mThrowsTags = rv.toArray(new ThrowsTagInfo[rv.size()]);
+
+      mThrowsTags = rv.toArray(ThrowsTagInfo.getArray(rv.size()));
     }
     return mThrowsTags;
   }
@@ -424,6 +425,12 @@
     if (mParamTags == null) {
       final int N = mParameters.size();
 
+      if (N == 0) {
+          // Early out for empty case.
+          mParamTags = ParamTagInfo.EMPTY_ARRAY;
+          return ParamTagInfo.EMPTY_ARRAY;
+      }
+
       String[] names = new String[N];
       String[] comments = new String[N];
       SourcePositionInfo[] positions = new SourcePositionInfo[N];
@@ -464,7 +471,7 @@
       }
 
       // construct the results, and cache them for next time
-      mParamTags = new ParamTagInfo[N];
+      mParamTags = ParamTagInfo.getArray(N);
       for (i = 0; i < N; i++) {
         mParamTags[i] =
             new ParamTagInfo("@param", "@param", names[i] + " " + comments[i], parent(),
diff --git a/src/com/google/doclava/ParamTagInfo.java b/src/com/google/doclava/ParamTagInfo.java
index f8329bc..13eb30b 100644
--- a/src/com/google/doclava/ParamTagInfo.java
+++ b/src/com/google/doclava/ParamTagInfo.java
@@ -22,6 +22,12 @@
 import java.util.regex.Matcher;
 
 public class ParamTagInfo extends ParsedTagInfo {
+  public static final ParamTagInfo[] EMPTY_ARRAY = new ParamTagInfo[0];
+
+  public static ParamTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new ParamTagInfo[size];
+  }
+
   static final Pattern PATTERN = Pattern.compile("([^ \t\r\n]+)[ \t\r\n]+(.*)", Pattern.DOTALL);
 
   private boolean mIsTypeParameter;
diff --git a/src/com/google/doclava/ParsedTagInfo.java b/src/com/google/doclava/ParsedTagInfo.java
index bcb9230..aad3767 100755
--- a/src/com/google/doclava/ParsedTagInfo.java
+++ b/src/com/google/doclava/ParsedTagInfo.java
@@ -19,6 +19,12 @@
 import java.util.ArrayList;
 
 public class ParsedTagInfo extends TagInfo {
+  public static final ParsedTagInfo[] EMPTY_ARRAY = new ParsedTagInfo[0];
+
+  public static ParsedTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new ParsedTagInfo[size];
+  }
+
   private ContainerInfo mContainer;
   private String mCommentText;
   private Comment mComment;
@@ -50,6 +56,6 @@
         list.add(t[j]);
       }
     }
-    return list.toArray(new TagInfo[list.size()]);
+    return list.toArray(TagInfo.getArray(list.size()));
   }
 }
diff --git a/src/com/google/doclava/SampleTagInfo.java b/src/com/google/doclava/SampleTagInfo.java
index a69a3f3..66eb9ac 100644
--- a/src/com/google/doclava/SampleTagInfo.java
+++ b/src/com/google/doclava/SampleTagInfo.java
@@ -44,6 +44,12 @@
  * samples/ApiDemos/src/com/google/app/Notification1.java Bleh}
  */
 public class SampleTagInfo extends TagInfo {
+  public static final SampleTagInfo[] EMPTY_ARRAY = new SampleTagInfo[0];
+
+  public static SampleTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new SampleTagInfo[size];
+  }
+
   static final int STATE_BEGIN = 0;
   static final int STATE_MATCHING = 1;
 
diff --git a/src/com/google/doclava/SeeTagInfo.java b/src/com/google/doclava/SeeTagInfo.java
index 34e6aed..9f38655 100644
--- a/src/com/google/doclava/SeeTagInfo.java
+++ b/src/com/google/doclava/SeeTagInfo.java
@@ -19,6 +19,12 @@
 import com.google.clearsilver.jsilver.data.Data;
 
 public class SeeTagInfo extends TagInfo {
+  public static final SeeTagInfo[] EMPTY_ARRAY = new SeeTagInfo[0];
+
+  public static SeeTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new SeeTagInfo[size];
+  }
+
   private ContainerInfo mBase;
   LinkReference mLink;
 
diff --git a/src/com/google/doclava/TagInfo.java b/src/com/google/doclava/TagInfo.java
index ec1f811..7bb640e 100644
--- a/src/com/google/doclava/TagInfo.java
+++ b/src/com/google/doclava/TagInfo.java
@@ -19,6 +19,12 @@
 import com.google.clearsilver.jsilver.data.Data;
 
 public class TagInfo {
+  public static final TagInfo[] EMPTY_ARRAY = new TagInfo[0];
+
+  public static TagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new TagInfo[size];
+  }
+
   private String mName;
   private String mText;
   private String mKind;
diff --git a/src/com/google/doclava/TextTagInfo.java b/src/com/google/doclava/TextTagInfo.java
index 35a486b..7403883 100644
--- a/src/com/google/doclava/TextTagInfo.java
+++ b/src/com/google/doclava/TextTagInfo.java
@@ -17,6 +17,12 @@
 package com.google.doclava;
 
 public class TextTagInfo extends TagInfo {
+  public static final TextTagInfo[] EMPTY_ARRAY = new TextTagInfo[0];
+
+  public static TextTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new TextTagInfo[size];
+  }
+
   TextTagInfo(String n, String k, String t, SourcePositionInfo p) {
     super(n, k, Doclava.escape(t), p);
   }
diff --git a/src/com/google/doclava/ThrowsTagInfo.java b/src/com/google/doclava/ThrowsTagInfo.java
index 5f49485..9a9e72f 100644
--- a/src/com/google/doclava/ThrowsTagInfo.java
+++ b/src/com/google/doclava/ThrowsTagInfo.java
@@ -22,7 +22,14 @@
 import java.util.regex.Matcher;
 
 public class ThrowsTagInfo extends ParsedTagInfo {
+  public static final ThrowsTagInfo[] EMPTY_ARRAY = new ThrowsTagInfo[0];
+
+  public static ThrowsTagInfo[] getArray(int size) {
+      return size == 0 ? EMPTY_ARRAY : new ThrowsTagInfo[size];
+  }
+
   static final Pattern PATTERN = Pattern.compile("(\\S+)\\s+(.*)", Pattern.DOTALL);
+
   private ClassInfo mException;
 
   public ThrowsTagInfo(String name, String kind, String text, ContainerInfo base,
