メモリやCPU使用率が高すぎる?
Java 1.6で動作するアナログ時計のようなものを作っていて、
一応動作はするのですが、メモリやCPUの使用率が常駐に向かない程度まで高くなってしまいます。
具体的には、メモリが100MB前後、CPUが10%前後で安定しています。
増え続ける様子はないのですが Intel Core i7 の10%はかなりの割合です。
ここに書いているソースが全てではないのですが、大きな間違いや代替案等ありましたら教えていただけるとありがたいです。
Jpanel に 盤面、長針、短針、秒針 を描画するのが主な構造です。
秒針はスムーズに廻るタイプなので概ね30FPS程度の間隔で repaint() を呼んでいます。
アニメーションは専用のスレッドを使い、次のようにしています。
while(true){
try{Thread.sleep(sleepTime);}catch(InterruptedException ie){}
SwingUtilities.invokeLater(new Runnable(){
public void run(){ paintPane.repaint(); }
});
}
JPanelのpaintComponentは次のとおりです
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.scale(scale, scale);
//shorthand.draw(g)などの描画処理
g2d.dispose();
針の描画はこちらです。
public void draw(Graphics g){
angle=(角度の算出処理)
Graphics2D g2d = (Graphics2D) g.create();
AffineTransform oldtr = ((Graphics2D)g).getTransform();
g2d.translate(this.posX - this.axisX, this.posY - this.axisY);
g2d.rotate(Math.toRadians(angle), this.axisX, this.axisY;
g2d.drawImage(this.image, 0, 0, null);
g2d.setTransform(oldtr);
g2d.dispose();
}
時計の針専用のクラスを用意し、針の画像、アングル、位置などの情報をもたせています。
全体のサイズは300x300ピクセル前後です。
お礼
回答ありがとうございます。 4Gのメモリもスカスカなくらい、まだまだ余力があるということなんですね。 勉強になりました。 どうもです!!