在 Java 应用程序中实现无垃圾对象池的策略?

问题描述 投票:0回答:1

我的 Java 应用程序显示由对象的创建和处置触发的过多垃圾收集活动。为了解决这个问题,我正在考虑实现一个可以重用对象的对象池。

我的问题是:

  1. Java 中的无垃圾对象池实现需要具备哪些基本功能?

  2. 对象池如何根据应用程序负载动态管理其大小,而不为垃圾收集器创建垃圾?

  3. 如何处理无法重复使用的不可变对象(如

    String
    )?

寻找有关对象池策略/方法的见解,这些策略/方法可以通过最大限度地减少 GC 活动来帮助提高性能。

java performance garbage-collection real-time object-pooling
1个回答
0
投票

也许这样的事情可以作为您的起点。

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;
   }

}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.