* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Stack implementation in Java
Functional programming wikipedia , lookup
Go (programming language) wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Java syntax wikipedia , lookup
Class (computer programming) wikipedia , lookup
Dependency injection wikipedia , lookup
Name mangling wikipedia , lookup
Reactive programming wikipedia , lookup
Library (computing) wikipedia , lookup
Scala (programming language) wikipedia , lookup
Structured programming wikipedia , lookup
Resource management (computing) wikipedia , lookup
C Sharp syntax wikipedia , lookup
Design Patterns wikipedia , lookup
Java (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Java performance wikipedia , lookup
Memory leaks in Java?
Not exactly memory leak
but reduced performance due to
7/7/2017
increased garbage collection activities and
increased memory footprint
Good Java Programming
1
Stack implementation in Java
public class MyStack {
private Object[] stackElements;
private int currentSize = 0;
private static int INIT_CAPACITY = 100;
public MyStack() {
stackElements = new Object[INIT_CAPACITY];
}
public void push(Object objAdd) {
ensureCapacity();
currentSize++;
stackElements[currentSize] = objAdd;
}
// code continued in next slide
}
7/7/2017
Good Java Programming
2
Stack implementation in Java (contd)
public Object pop() {
if (0 == currentSize)
throw new EmptyStackException();
currentSize--;
return stackElements[currentSize];
}
private void ensureCapacity() {
if (stackElements.length == currentSize) {
// double the array + 1
// copyOf method:
http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html
stackElements = Arrays.copyOf(stackElements, 2 * currentSize + 1);
}
}
} // end class MyStack
7/7/2017
Good Java Programming
3
Memory leaks in Java?
As the stack grows and shrinks objects that were
popped off will not be garbage collected
even if the driver/client code, which is using the
Stack, does not have those references
Why?
Stack maintains obsolete references to these objects
Obsolete reference: a reference that will never be
dereferenced again
This is called Unintentional Object Retention
Note that such objects may contain other
references and soGood
onJava Programming
7/7/2017
4
Unintentional Object Retention
Note that such objects may contain other
references and so on
Guideline
Always null the references
Added benefit
accidental use of that reference (array index in this case) will
result in a NullPointerException
Do NOT null every reference
7/7/2017
overkill, cluttered code
Define each variable in the narrowest possible scope and let it
fall out of scope (we will discuss this later)
Good Java Programming
5
Eliminate obsolete references
public Object pop() {
if (0 == currentSize)
throw new EmptyStackException();
Object resultObj = stackElements[currentSize];
// elimnate the obsolete reference by setting it to null
stackElements[currentSize] = null;
currentSize--;
return resultObj;
}
7/7/2017
Good Java Programming
6
Design Guideline
Eliminate obsolete object references
7/7/2017
Good Java Programming
7