MAPREDUCE-4138. Reduce memory usage of counters due to non-static nested classes.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1331023 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Thomas White 2012-04-26 18:39:22 +00:00
parent cda16311a9
commit 1a118d6a32
5 changed files with 15 additions and 31 deletions

View File

@ -154,6 +154,9 @@ Release 2.0.0 - UNRELEASED
MAPREDUCE-4093. Improve RM WebApp start up when proxy address is not set MAPREDUCE-4093. Improve RM WebApp start up when proxy address is not set
(Devaraj K vai bobby) (Devaraj K vai bobby)
MAPREDUCE-4138. Reduce memory usage of counters due to non-static nested
classes. (tomwhite)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -387,21 +387,13 @@ public CounterGroupBase<Counter> getUnderlyingGroup() {
private static class FrameworkGroupImpl<T extends Enum<T>> private static class FrameworkGroupImpl<T extends Enum<T>>
extends FrameworkCounterGroup<T, Counter> { extends FrameworkCounterGroup<T, Counter> {
// Mix the framework counter implementation into the Counter interface
class FrameworkCounterImpl extends FrameworkCounter {
FrameworkCounterImpl(T key) {
super(key);
}
}
FrameworkGroupImpl(Class<T> cls) { FrameworkGroupImpl(Class<T> cls) {
super(cls); super(cls);
} }
@Override @Override
protected Counter newCounter(T key) { protected Counter newCounter(T key) {
return new Counter(new FrameworkCounterImpl(key)); return new Counter(new FrameworkCounter<T>(key, getName()));
} }
@Override @Override
@ -413,17 +405,9 @@ public CounterGroupBase<Counter> getUnderlyingGroup() {
// Mix the file system counter group implementation into the Group interface // Mix the file system counter group implementation into the Group interface
private static class FSGroupImpl extends FileSystemCounterGroup<Counter> { private static class FSGroupImpl extends FileSystemCounterGroup<Counter> {
private class FSCounterImpl extends FSCounter {
FSCounterImpl(String scheme, FileSystemCounter key) {
super(scheme, key);
}
}
@Override @Override
protected Counter newCounter(String scheme, FileSystemCounter key) { protected Counter newCounter(String scheme, FileSystemCounter key) {
return new Counter(new FSCounterImpl(scheme, key)); return new Counter(new FSCounter(scheme, key));
} }
@Override @Override

View File

@ -49,8 +49,8 @@ private static class FrameworkGroupImpl<T extends Enum<T>>
} }
@Override @Override
protected FrameworkCounter newCounter(T key) { protected FrameworkCounter<T> newCounter(T key) {
return new FrameworkCounter(key); return new FrameworkCounter<T>(key, getName());
} }
@Override @Override

View File

@ -61,7 +61,7 @@ public abstract class FileSystemCounterGroup<C extends Counter>
private static final Joiner DISP_JOINER = Joiner.on(": "); private static final Joiner DISP_JOINER = Joiner.on(": ");
@InterfaceAudience.Private @InterfaceAudience.Private
public class FSCounter extends AbstractCounter { public static class FSCounter extends AbstractCounter {
final String scheme; final String scheme;
final FileSystemCounter key; final FileSystemCounter key;
private long value; private long value;
@ -139,8 +139,7 @@ public void setDisplayName(String displayName) {
@Override @Override
public void addCounter(C counter) { public void addCounter(C counter) {
C ours; C ours;
if (counter instanceof FileSystemCounterGroup<?>.FSCounter) { if (counter instanceof FileSystemCounterGroup.FSCounter) {
@SuppressWarnings("unchecked")
FSCounter c = (FSCounter) counter; FSCounter c = (FSCounter) counter;
ours = findCounter(c.scheme, c.key); ours = findCounter(c.scheme, c.key);
} }

View File

@ -57,12 +57,14 @@ public abstract class FrameworkCounterGroup<T extends Enum<T>,
* Use old (which extends new) interface to make compatibility easier. * Use old (which extends new) interface to make compatibility easier.
*/ */
@InterfaceAudience.Private @InterfaceAudience.Private
public class FrameworkCounter extends AbstractCounter { public static class FrameworkCounter<T extends Enum<T>> extends AbstractCounter {
final T key; final T key;
final String groupName;
private long value; private long value;
public FrameworkCounter(T ref) { public FrameworkCounter(T ref, String groupName) {
key = ref; key = ref;
this.groupName = groupName;
} }
@Override @Override
@ -72,7 +74,7 @@ public String getName() {
@Override @Override
public String getDisplayName() { public String getDisplayName() {
return localizeCounterName(getName()); return ResourceBundles.getCounterName(groupName, getName(), getName());
} }
@Override @Override
@ -131,10 +133,6 @@ public void setDisplayName(String displayName) {
this.displayName = displayName; this.displayName = displayName;
} }
private String localizeCounterName(String counterName) {
return ResourceBundles.getCounterName(getName(), counterName, counterName);
}
private T valueOf(String name) { private T valueOf(String name) {
return Enum.valueOf(enumClass, name); return Enum.valueOf(enumClass, name);
} }
@ -204,7 +202,7 @@ public void incrAllCounters(CounterGroupBase<C> other) {
if (checkNotNull(other, "other counter group") if (checkNotNull(other, "other counter group")
instanceof FrameworkCounterGroup<?, ?>) { instanceof FrameworkCounterGroup<?, ?>) {
for (Counter counter : other) { for (Counter counter : other) {
findCounter(((FrameworkCounter) counter).key) findCounter(((FrameworkCounter) counter).key.name())
.increment(counter.getValue()); .increment(counter.getValue());
} }
} }