我的 Java 应用程序显示由对象的创建和处置触发的过多垃圾收集活动。为了解决这个问题,我正在考虑实现一个可以重用对象的对象池。
我的问题是:
Java 中的无垃圾对象池实现需要具备哪些基本功能?
对象池如何根据应用程序负载动态管理其大小,而不为垃圾收集器创建垃圾?
如何处理无法重复使用的不可变对象(如
String
)?
寻找有关对象池策略/方法的见解,这些策略/方法可以通过最大限度地减少 GC 活动来帮助提高性能。
也许这样的事情可以作为您的起点。
List<D> objectsEmpty = new ArrayList<>();
List<D> objectslist = new ArrayList<>();
String dat = "1,Tom:2,Jack:3,Willy:4,Sam";
void init() {
String data[] = dat.split( ":" );
for( int i = 0; i < data.length; i ++ ) {
objectslist.add( createObject( Integer.parseInt(
data[ i ].split( "," )[ 0 ] ),
data[ i ].split( "," )[ 1 ] ) );
}
deleteObject( objectslist.remove( 2 ) );
objectslist.add( createObject( 12, "Hardy" ) );
for( int i = 0; i < objectslist.size(); i ++ ) {
System.out.println( objectslist.get( i ).getName() );
}
}
void deleteObject( D obj ) {
obj.setName( "" );
obj.setValue( 0 );
objectsEmpty.add( obj );
}
D createObject( int value, String name ) {
D newObject;
if( objectsEmpty.isEmpty() ) {
newObject = new D( value, name );
objectslist.add( newObject );
return newObject;
}
newObject = objectsEmpty.remove( 0 );
newObject.setName( name );
newObject.setValue( value );
return newObject;
}
class D {
int value = 0;
String name = "";
public D( int v, String n ) {
value = v;
name = n;
}
public int getValue() {
return value;
}
public void setValue( int value ) {
this.value = value;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
}