[MongoDB] shell 내에서 커서를 이용하여 연속으로 출력시키는 방법.
var myCursor = db.inventory.find().addOption(DBQuery.Option.noTimeout);
var myCursor = db.inventory.find(); var myFirstDocument = myCursor.hasNext() ? myCursor.next() : null; myCursor.objsLeftInBatch();
var myCursor = db.inventory.find().addOption(DBQuery.Option.noTimeout);
var myCursor = db.inventory.find(); var myFirstDocument = myCursor.hasNext() ? myCursor.next() : null; myCursor.objsLeftInBatch();
JDK 버전 충돌이 날 경우 해결 방법 (1) | 2016.02.12 |
---|---|
리눅스 환경에서 JNI 사용 예제 [메모리 누수 내용 추가] (1) | 2016.02.12 |
com.HelloWorld.java -> com 폴더 안에 HelloWorld.java JNI 모듈이다.
package com;
public class HelloWorld {
public HelloWorld (){
System.loadLibrary("HelloWorld");
}
public native void printHelloWorld();
}
com.main.java -> com 폴더 안에 main.java JNI 모듈을 사용할 메인 함수이다.
package com;
public class main {
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
hw.printHelloWorld();
}
}
javac ./com/HelloWorld.java
javah -cp ./ com.HelloWorld
com_HelloWorld.h -> 요거는 com 폴더 안에 있는 것이 아니라 컴파일 루트에 있다.
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_HelloWorld */
#ifndef _Included_com_HelloWorld
#define _Included_com_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_HelloWorld
* Method: printHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_HelloWorld_printHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
HelloWorld.cpp -> vi HelloWorld.cpp 로 com 폴더 밖에서 작성.
#include <stdio.h>
#include "com_HelloWorld.h"
JNIEXPORT void JNICALL Java_com_HelloWorld_printHelloWorld
(JNIEnv *env, jobject obj){
printf("hi World \n");
return;
}
gcc -fPIC -g -c -Wall -I /usr/lib/jvm/java-7-openjdk-amd64/include HelloWorld.cpp
gcc -shared -o libHelloWorld.so.1.0.1 HelloWorld.o -lc
ln -s libHelloWorld.so.1.0.1 libHelloWorld.so
javac -d . com/*.java
java -cp . com.main
* 메모리 누수 관련 내용 추가
.cpp 파일에서 jstring param 의 데이터를 쓰고 난 뒤에는
반드시 Release를 해주어야 한다.
이는 jstring 객체 뿐만 아니라 다른 jobject 들도 마찬가지이다.
안 그러면 메모리 누수가 발생한다.
아래는 올바른 예제. 붉은색 글씨가 Get 하고 Release 하는 부분이다.
#include <jni.h> #include "MessageType.h" #include <stdio.h> JNIEXPORT jstring JNICALL Java_MessageType_printMessage(JNIEnv* env, jobject obj, jstring msg) { char buf[128]; const char *str = (*env)->GetStringUTFChars(env, msg, 0); printf("%s", str); (*env)->ReleaseStringUTFChars(env, msg, str); scanf("%s", buf); return (*env)->NewStringUTF(env, buf); } |
출처 : https://rerethink.tistory.com/entry/jni%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%A0%84%EB%8B%AC-%EC%9D%B8%EC%9E%90
JDK 버전 충돌이 날 경우 해결 방법 (1) | 2016.02.12 |
---|---|
Json Parser 라이브러리 (0) | 2016.02.12 |