將工做中,或者看書的過程當中碰到的本身以前沒有掌握的知識點進行概括,暫時就碰到什麼寫什麼,後續有必定量的話進行整理;java
1. list實現程序員
相關文章:https://zhuanlan.zhihu.com/p/24730576?refer=dreawer編程
1 LinkedList<String> list = new LinkedList<String>(); 2 list.addFirst("aaa"); //將元素添加到鏈表集合最前面 3 list.pollFirst() ; //獲取並移除此列表的第一個元素;若是此列表爲空,則返回 null。 4 list.pollLast() ; //獲取並移除此列表的最後一個元素;若是此列表爲空,則返回 null。 5 list.remove(int index) ; //移除此列表中指定位置處的元素。 6 list.remove(Object o) ; //今後列表中移除首次出現的指定元素(若是存在)。 7 list.add("bbb"); //在鏈表末尾增長元素 8 list.add(int index, E element) ; //在此列表中指定的位置插入指定的元素。 9 list.set(int index, E element) ; // 將此列表中指定位置的元素替換爲指定的元素。 10 11 12 13 重點:LinkedList 和List 是兩個類,等號前面須要注意是LinkedList 不能是List
2. native關鍵字 以及在java中調用其餘語言代碼安全
native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其餘語言(如C和C++)實現的文件中。Java語言自己不能對操做系統底層進行訪問和操做,可是能夠經過JNI接口調用其餘語言來實現對底層的訪問。 JNI是Java本機接口(Java Native Interface),是一個本機編程接口,它是Java軟件開發工具箱(Java Software Development Kit,SDK)的一部分。JNI容許Java代碼使用以其餘語言編寫的代碼和代碼庫。Invocation API(JNI的一部分)能夠用來將Java虛擬機(JVM)嵌入到本機應用程序中,從而容許程序員從本機代碼內部調用Java代碼。 不過,對Java外部的調用一般不能移植到其餘平臺,在applet中還可能引起安全異常。實現本地代碼將使您的Java應用程序沒法經過100%純Java測試。可是,若是必須執行本地調用,則要考慮幾個準則: 1.將您的全部本地方法都封裝到一個類中,這個類調用單個的DLL。對每一種目標操做系統平臺,均可以用特定於適當平臺的版本的DLL。這樣能夠將本地代碼的影響減小到最小,並有助於將之後所須要的移植問題考慮在內。 2.本地方法儘可能簡單。儘可能使您的本地方法對第三方(包括Microsoft)運行時DLL的依賴減小到最小。使您的本地方法儘可能獨立,以將加載您的DLL和應用程序所需的開銷減小到最小。若是須要運行時DLL,必須隨應用程序一塊兒提供。 JNI的書寫步驟以下: a.編寫帶有native聲明的方法的Java類 b.使用javac命令編譯編寫的Java類 c.使用java -jni ****來生成後綴名爲.h的頭文件 d.使用其餘語言(C、C++)實現本地方法 e.將本地方法編寫的文件生成動態連接庫 如下是一個在Java中調用本地C程序的簡單的例子: a.編寫HelloWorld.java類 class HelloWorld{ public native void hello(); static{ System.loadLibrary("hello"); } public static void main(String[] args){ new HelloWorld().hello(); } } b.編譯 javac HelloWorld.java c.生成.h文件 javah -jni HelloWorld 生成內容以下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: hello * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_hello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 第一個參數是調用JNI方法時使用的JNI Environment指針。第二個參數是指向在此Java代碼中實例化的Java對象HelloWorld的一個句柄。其餘參數是方法自己的參數 d.c實現 #include <jni.h> #include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){ printf("Hello World!\n"); return; } 其中,第一行是將jni.h文件引入(在%JAVA_HOME%\include目錄下),裏邊有JNIEnv和jobject的定義。 e.編譯c實現 這裏以在Windows中爲例,須要生成dll文件。在保存HelloWorldImpl.c文件夾下面,使用VC的編譯器cl成。 cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在選項-Fe後面配置,這裏是hello,由於在HelloWorld.java文件中咱們loadLibary的時候使用的名字是hello。固然這裏修改以後那裏也須要修改。另外須要將-I%java_home%\include -I%java_home%\include\win32參數加上,由於在第四步裏面編寫本地方法的時候引入了jni.h文件。 6) 運行程序 java HelloWorld就ok了!
3.查看JVM可優化參數 《LINUX下使用》app
java -server -Xmx1024m -Xms1024m -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -version| grep ParallelGCThreads
結果:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)工具
4.研究【阿里巴巴開發手冊】以後看到的開發工具
對於 Integer var=?在-128 至 127 之間的賦值,Integer 對象是在 IntegerCache.cache 產生,會複用已有對象,這個區間內的 Integer 值能夠直接使用==進行判斷,可是這個區間之 外的全部數據,都會在堆上產生,並不會複用已有對象,這是一個大坑,推薦使用 equals 方 法進行判斷。