• ベストアンサー

インスタンス

String s1 = new String(str1.getBytes("8859_1"), "x-euc-jp"); s1 = new String(str2.getBytes("8859_1"), "x-euc-jp"); s1 = new String(str3.getBytes("8859_1"), "x-euc-jp"); のように同じ変数にたいして new演算子で新たにインスタンスを確保した際 前に確保したインスタンスは開放されているのでしょうか? 基礎的な質問かと思いますが宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

開放とはメモリの開放ってことでしょうか? それでしたら「開放される運命にある」ってことだと思います。 Java ではメモリの管理をバーチャルマシーンが行うのでプログラマが意図的に開放する事が出来ません。 しかし開放してもらう候補にする事は可能です。 その為には、以後参照されなくなる必要があります。 で、上記の場合では、最初に s1 に代入された参照が2度目のStringの生成で「何処からも参照されない」状態になりますので「ガーベジコレクションの候補」になります。 後はプログラマがどうこう出来る問題ではないので、放置しておいて構いません。 これ以後の振る舞いは、バーチャルマシーンの実装によって様々だと思いますので、一概には言えませんが、メモリが不足するまでは放って置かれるくらいに考えておけば良いのではないでしょうか(適当

furyfox
質問者

お礼

その辺はVMに任すのがJavaの仕様なんですね。 ご回答ありがとうございました。

関連するQ&A