JNI以前的一些筆記--4

#JNI是什麼
>java native interface : java 本地接口
>讓java語言調用底層語言的技術就叫JNI

#JNI有什麼用
>規範,讓java語言和底層的c/c++語言可以互相訪問,互相調用。
>適配器模式,讓java的數據類型和c/c++語言的數據類型可以互相對應。

##應用場景
* 操作硬件(編寫驅動,用java代碼調用底層的c代碼)
> 車載電腦 obd模塊,on board debug
* 效率要求非常高 
> 圖形的計算,極品飛車
> c、c++語言效率高,java語言效率低一些
* 不重複發明輪子
> opencv  計算機圖形識別的庫,人臉識別,圖形圖像的處理。 c/c++
> ffmpeg  視頻播放的開源項目 c/c++
> opencore 多媒體播放框架
> opengl  圖形處理的框架
> webkit  瀏覽器解析框架
> 7zip    開源的壓縮算法
* 特殊的業務邏輯
> java代碼反編譯容易,不安全
> c代碼,反編譯後讀起來很困難,安全
> 手機網銀支付模塊

#JNI怎麼用
* 熟悉c/c++語法
* 熟悉JAVA語法
* 熟悉jni的規範


#c語言
編譯工具 gcc
c99標準
devcpp開發工具

##java的數據類型
java語言8大基本類型數據
* byte   8位 1個字節
* short  16位 2個字節
* int    32位 4個字節 
* long   64位 8個字節
* double 64位 8個字節
* boolean  8位  1個字節
* char    16位  2個字節
* float   32位 4個字節

##c語言的數據類型
char       的長度爲:1 (跟java不同) 代替byte
int        的長度爲:4  (用0或者非0表示boolean)
float      的長度爲:4
double     的長度爲:8
long       的長度爲:4 (跟java不同)
short      的長度爲:2
long long    的長度:8 (表示java的long)


##輸入輸出函數
System.out.println();
c語言的輸出函數


##\*號的含義
\* 號放在 數據類型的後面 代表的是 int* 數據類型的指針變量類型
\* 號放在 指針變量的前面 *p 代表把p表示地址裏面存放的數據取出來


#指針
什麼是指針:
指針就是一塊內存空間,就是一個內存地址
默認c語言的指針 32位內存空間
0x00000000~ 0xffffffff

#指針和指針變量是兩個不同的概念
* 指針代表的是一塊內存地址
* 指針變量是一個存儲指針的變量,存儲這塊內存地址


#修改交換數據的模板
* 傳遞的應該是要修改變量的內存地址
* 子函數裏面 根據這個內存地址,把這個內存地址裏面的數據給修改了


#java語言的值傳遞和引用傳遞
>準確的講,所有的語言都是值傳遞
>thinking in java


#動態內存分配和靜態內存分配
* 動態  new出來的都是動態的  需要程序員手工的申請,需要手工的釋放,運行在堆裏面。必須由程序員手工的回收,或者垃圾回收器去回收內存空間。大小可以無限大,整個windows操作系統系統的內存。
* 靜態  定義出來的都是靜態的 int i; int j; 運行在棧裏面,後進先出的結構,方法執行完畢,操作系統會自動的回收內存空間。都是有大小限制。


>java代碼  new 對象 創建在堆內存裏面。 
    
    Person p = new Person();
    在棧內存創建一個指針變量 存放對象引用(地址)
    在堆內存創建一個對象  person
    垃圾回收器 會回收沒有引用的對象。

>c代碼
        
        malloc()
        realloc()
        free()
   
 

發佈了272 篇原創文章 · 獲贊 37 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章