El ancho de cadena a través del cálculo de fontmetrics es muy lento si hay letras árabes o persas en el texto

Tengo un problema. La interfaz de mi aplicación funciona mucho más lentamente si uso idiomas orientales allí. Especialmente lo sentí en componentes como JList, JCombobox, JTable.

La forma en que encontré el rendimiento del método FontMetrics.stringWidth es muy lenta (más de 500 veces) si en el texto al menos una letra es árabe o persa. Cómo sé que es un método comúnmente utilizado en varios componentes de swing.

¿Hay alguna manera de aumentar el rendimiento de este método?

Aquí está la clase de ejemplo que demuestra el problema:

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class FontMetricsSpeedTest
{

 public static void main( String args[] ) {
  String persian="صصصصصصصصصصصصصصصصصصصصص";
  String english="abcde()agjklj;lkjelwk";
  FontMetrics fm=createFontMetrics(new Font("dialog",Font.PLAIN,12));
  int size=50000;
  long start=System.currentTimeMillis();
  for(int i=0;i<size;i++)
  {
   fm.stringWidth(persian);
  }
  System.out.println("Calculation time for persian: "+(System.currentTimeMillis()-start)+" ms");
  start=System.currentTimeMillis();
  for(int i=0;i<size;i++)
  {
   fm.stringWidth(english);
  }
  System.out.println("Calculation time for english: "+(System.currentTimeMillis()-start)+" ms");
 }
 private static FontMetrics createFontMetrics(Font font)
 {
  BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
  Graphics g = bi.getGraphics();
  FontMetrics fm = g.getFontMetrics(font);
  g.dispose();
  bi = null;
  return fm;
 }
}

Para mí da el siguiente resultado:

Tiempo de cálculo para persa: 5482 ms

Tiempo de cálculo para inglés: 11 ms

Respuestas a la pregunta(4)

Su respuesta a la pregunta