- PR -

new String

1
投稿者投稿内容
mikann
会議室デビュー日: 2004/09/01
投稿数: 2
投稿日時: 2004-09-07 17:02
はじめまして。

今JSP MODEL1ベースのイントラネットシステムの保守作業に参加しています。
コードの中で、

String id = new String("");
String name = new String("john");

のような、動作は問題ないですが、ちょっとJAVAらしくないコードがたくさんあります。
そのコードを片付けたいんですが、
「それはJVMが片付けてくれるからそのままで置いてもよい」と言われました。

本当に大丈夫でしょうか?
メモリチューニングのため、片付けほうがいいじゃないかと思いますが。

ご意見よろしくお願いします。

-------------------------------
PS..まだ日本語が変ですが、どうぞよろしくお願いします。




[ メッセージ編集済み 編集者: mikann 編集日時 2004-09-07 17:06 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-07 17:08
確かに無駄といえば無駄ですが、今のJVMでは寿命の短いインスタンスの生成/GCのコストは
たいしたことありませんから放っておいても問題ないでしょう。
おっきー
大ベテラン
会議室デビュー日: 2003/05/01
投稿数: 104
投稿日時: 2004-09-07 17:09
確かに問題にはならないかもしれません。
でも駄目駄目だと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-07 17:29
伺った内容からは判断に必要な材料がないように見えます。
保守、という仕事がどのようなものなのかわかりませんが、バグつぶしを目的としているのなら放っておいてもよいと思います。
パフォーマンス、メモリフットプリント等のチューニングを目的としているのであれば何がどの程度ボトルネックになっているのか定量的な指標で測って優先順位を決めて修正していけば良いと思います。
すでにかなりチューニングされていて、ここらへんが気になっているようならば要修正リストの上の方にくるべきでしょう。でも恐らくはもっと効果的な修正があるような気がします。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-09-07 19:43
私の周りにも、そういうダメダメな既存コードが多くて困っています。
そういうのは読んでるだけでイライラしてくるので精神衛生上良くないのですが、
保守担当でもないのでとりあえず放置しています。
もし、他にお仕事がなくて暇してるのでなければ放置でいいと思いますよ。
harumaki
常連さん
会議室デビュー日: 2004/09/09
投稿数: 32
投稿日時: 2004-09-12 21:40
こんばんわ。

本題とズレた質問になってしまうのですが、
「JAVAらしくないコード」というのはどういう意味なのでしょうか?
なぜダメダメなのでしょうか?

リテラルのハードコーディング?

どなたかご教授ください。よろしくお願いいたします。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-09-12 22:58
引用:

「JAVAらしくないコード」というのはどういう意味なのでしょうか?


Javaでは、敢えて文字列リテラルを渡してStringクラスをインスタンス化する
必要はないです。自動的にメモリが割り当てられますから。しかも、同一の
リテラルがアロケートされるメモリは、常に同一になります。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-09-12 23:28
unibon です。こんにちわ。

引用:

mikannさんの書き込み (2004-09-07 17:02) より:
コードの中で、

String id = new String("");
String name = new String("john");

のような、動作は問題ないですが、ちょっとJAVAらしくないコードがたくさんあります。
そのコードを片付けたいんですが、
「それはJVMが片付けてくれるからそのままで置いてもよい」と言われました。

本当に大丈夫でしょうか?


このような代入をしている場合は、比較の際にも、
コード:
String name0 = new String("john");
String name1 = new String("john");
String[] names = new String[2];
names[0] = name0;
names[1] = name1;
...
if (names[0] == name1) {
}


のようなことをしている恐れがあり、うかつに
コード:
String name0 = "john";
String name1 = "john";


と書きかえるのは危険です。挙動が変わってしまいます。まあ、これは比較の仕方がすでにダメなので、プログラムがどう動くかを気にしてもしかたがないのですけど。
1

スキルアップ/キャリアアップ(JOB@IT)