When I was reading a book yesterday, I saw a problem about Java Memory leakage. So I wrote this program and shared it with myself. Anyway, I felt that there was a problem, I also hope you can help me see if it is not a memory leak. Here is an example .. Thank you ..
Public class selfstack {
Private int size = 0;
Private object [] elements;
Public object [] getelements (){
Return elements;
}
Public void setelements (object [] elements ){
This. elements = elements;
}
Public selfstack (INT capability)
{
Elements = new object [capability];
}
Public void push (Object object)
{
Ensurecapability ();
Elements [size ++] = object;
}
Public object POP ()
{
Return elements [-- size];
}
Public int getsize (){
Return size;
}
Public void ensurecapability (){
If (size = elements. length)
{
Object [] newelements = elements;
Elements = new object [2 * elements. Length];
System. arraycopy (newelements, 0, elements, 0, size );
}
}
}
Public void teststack () // Memory leakage test ....
{
Selfstack stack = new selfstack (10 );
For (INT I = 0; I <11; I ++)
{
String S = "ASD ";
Stack. Push (s );
}
System. Out. println (stack. getelements (). Length); // 20
System. Out. println (stack. getsize (); // 11
System. Out. println (stack. getelements () [stack. getsize ()-1]);
Stack. Pop ();
System. Out. println (stack. getsize (); // 10
If (stack. getelements () [10]! = NULL)
{
System. Out. println ("memory overflow .... ");
}
}
}
My opinion is: this does not seem to be a memory leak. The main problem is the size. Size seems to be just a cursor and has no special meaning .. What do you think...
This stack keeps a reference to the pop-up object and does not discard Java garbage collection .. I forget to take a look at it for me ..
Solution: (as mentioned in the book :)
Public object POP ()
{
Object result = elements [-- size];
Elements [size] = NULL;
Return result;
}