Tuesday, December 27, 2005
Java Memory Control
1. Weak Object References
Manage memory effectively with Java reference objects
///MemoryBlock.java
public class MemoryBlock {
int id;
int size;
byte[] block;
public MemoryBlock( int id, int size ) {
this.id = id;
this.size = size;
block = new byte[size];
System.out.println( "MemoryBlock created: "+this );
}
public String toString() {
return "{id="+id+",size="+size+"}";
}
protected void finalize() {
System.out.println( "MemoryBlock finalized: "+this );
}
}
//MyReference.java
import java.lang.ref.*;
public class MyReference extends SoftReference<MemoryBlock> {
public MyReference( MemoryBlock referent ) {
super( referent );
}
public MyReference( MemoryBlock referent, ReferenceQueue<MemoryBlock>q ) {
super( referent, q );
}
public String toString() {
return String.valueOf(get());
}
}
///MemoryTest1.java
import java.util.*;
public class MemoryTest1 {
public static void main( String[] args ) {
ArrayList<MemoryBlock> blocks = new ArrayList<MemoryBlock>();
int size = 65536;
for ( int id=0; true; id++ ) {
blocks.add( new MemoryBlock(id,size) );
System.out.println( "blocks: "+blocks );
size *= 2;
}
}
}
///MemoryTest2.java
import java.lang.ref.*;
import java.util.*;
public class MemoryTest2 {
public static void main( String[] args ) {
ArrayList<MyReference> blocks = new ArrayList<MyReference>();
int size = 65536;
for ( int id=0; true; id++ ) {
blocks.add( new MyReference(new MemoryBlock(id,size)) );
System.out.println( "blocks: "+blocks );
size *= 2;
}
}
}
2.
Java reference objects make caching easy