質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4367閲覧

JavaからJNAを使用して他言語ライブラリの読み込みについて

s1170022

総合スコア25

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/04/06 16:45

お世話になります。

JavaからJNAを使用し、C言語で作成されたライブラリを読み込むというプログラムを使用しています。
そこで、文字列のポインタを渡してライブラリ読み込み後に読み込み結果文字列を使用したいのですが、Java側で以下のアドレスのようなJnaライブラリがもつクラスを継承したクラスを宣言し、それの型の変数を宣言し、Cのライブラリに渡して使っています。

https://github.com/jakobwenzel/artnet-avr/blob/master/libftdi/src/main/java/ftdi/StringByReference.java

上記StringByReference型の変数をnewで宣言し、Cのライブラリを読み込んだ後、Java側の処理に戻ってきて、何かしらの処理を終え、変数が使われなくなった場合、Java側でポインタの解放は必要になってくるでしょうか?

それともGCが自動的に解放してくれているのでしょうか。

どなたかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JNA知らなかったので、ちょこっと調べてみました。

JNA API Documentation
Class ByReference
ByReference.java
Class Memory

どうやら、Memoryクラスのfinalize()で開放してるっぽい感じですね。

投稿2016/04/07 03:14

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s1170022

2016/04/07 03:54

回答ありがとうございます。 解放しているとなると、特にソース上意識はせずとも大丈夫、ということでしょうか。 また、並列で処理が動いていて、同じものが呼ばれた場合は解放タイミングとかはどうなりますか?
abs123

2016/04/07 05:49

finalize()はGC実行時どこからも参照されていなかった場合に、自動で実行されます。 なので、参照きったら勝手に解放されるって認識で大丈夫だと思います。 (finalize()を実行するためにVMから参照されることになるから、インスタンス自体は次のGCまで解放されないとか、finalize()が呼ばれなくてメモリリークしたとか、調べてみるとなんかいろいろ出てきますが、正常に動くことを祈りましょう。多分大丈夫です、多分)
s1170022

2016/04/07 06:06

ありがとうございます、 お手数なのですがfinalize()が呼ばれなくてメモリリークした件の参考文献にしたサイトなどをご教授できますでしょうか?
s1170022

2016/04/07 07:27

JNAに限らず、一般的なfinalizeということなのですね。ありがとうございます。 少し調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問