1. 什麼是 java 虛擬機
1.什麼是JAVA虛擬機(JVM)?
虛擬機是一種抽象化的計算機,可以通過在實際的計算機上模擬模擬各種計算機功能來實現的。Java虛擬機有自己完善的硬體架構,如堆棧、處理器、寄存器等,還具有許多相應的指令系統。Java虛擬機屏蔽了與具體操作系統平台相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。
2.JVM的概念與作用:
跨平台和內存管理
System.out.println();向系統控制台輸出內容
JVM負責向windows和linux 調用底層函數才能實現輸出。
與平台的無關性
Java虛擬機是Java語言底層實現的基礎。
3.JVM跨平台流程圖
注意:像JAVA跨平台主要靠JVM來實現的,JVM 與JAVA應用程序是1:1。
2.虛擬機垃圾回收機制與代碼優化
1.什麼是垃圾回收機制?
垃圾回收器可以比喻為「偉大的環衛工人」
垃圾收集GC(Garbage Collection)是Java語言的核心技術之一, 在Java中,程序員不需要去關心內存動態分配和垃圾回收的問題,這一切都交給了JVM來處理。
2.在JAVA代碼中如何發現垃圾?
對於Java對象來說,如果這個對象沒有被其他對象所引用該對象就是無用的,或者說 沒有被方法區和棧幀引用和本地方法棧使用的都是垃圾,其佔用的內存也就要被銷毀。
Java中標記垃圾的演算法主要有兩種, 引用計數法和根搜索演算法:
1.使用引用計數法
引用計數法就是給對象中添加一個引用計數器,每當有一個地方需要引用它,計數器就加 1。當引用失效,計數器就減 1。任何時候計數器為 0 的對象就是不可能再被使用的,可以當做垃圾收集。這種方法實現起來很簡單而且優缺點都很明顯。
優點 :執行效率高,程序執行受影響較小
缺點:無法檢測出循環引用的情況,導致內存泄露
2.使用根搜索計演算法:
這個演算法就是通過一系列稱為 「GC Roots」 的對象作為起點,從這些節點開始向下搜索,節點所走過的路徑稱為引用鏈,當一個對象到 GC Roots 沒有任何引用鏈相連的話,則證明此對象是不可用的。
3.如何將垃圾回收?
在Java中存在著四種垃圾回收演算法,標記清除演算法、復制演算法、標記整理演算法以及分代回收演算法。
標記清除法: 標記出所有需要被回收的對象,清除回收被標記的對象所佔用的空間。它的缺點在於:存在內存碎片,內存利用率不高。
分段復製法: 將內存分為大小相同的兩塊,每次使用其中的一塊。當第一塊的內存使用完後,就將還存活的對象復制到另一塊去,然後再把使用的空間一次清理掉。這樣就使每次的內存回收都是對內存區間的一半進行回收。它的缺點在於:大量的對象移動,會導致JVM卡頓。
標記整理演算法:該演算法標記階段和標記清除一樣,但是在完成標記之後,它不是直接清理可回收對象,而是將存活對象都向一端移動,然後清理掉端邊界以外的內存。這個是為了解決復制演算法的缺陷,碎片少,充分利用內存空間。
分代收集演算法: 根據具體的情況選擇具體的垃圾回收演算法。一般將java堆分為新生代和老年代,這樣我們就可以根據各個年代的特點選擇合適的垃圾收集演算法。當前虛擬機的垃圾收集都採用分代收集演算法。是因為它的效率更高。
2. 如何在虛擬機上的linux編譯JAVA
下載JDK for linux以jdk-6u24-linux-i586.bin
移動jdk-6u24-linux-i586.bin到/usr/java/
1、給許可權:sudo chmod u+x /usr/java/jdk-6u24-linux-i586.bin
2、安裝jdk:sudo /usr/java/jdk-6u24-linux-i586.bin
3、設置環境變數:
cd
sudo gedit ./.bashrc
在最後加上:
#set java environment
JAVA_HOME=/usr/share/java/jdk1.6.0_24
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export JAVA_HOME PATH CLASSPATH
4、使上面設置的環境變數生效:#source /etc/profile
5、設置ubuntu的默認jdk,原因使因為ubuntu默認有openjdk:
sudo update-alternatives --install /usr/bin/java java /usr/share/java/jdk1.6.0_24/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/share/java/jdk1.6.0_24/bin/javac 300
sudo update-alternatives --config java
選擇對應的jdk編號,回車
6、查看當前jdk版本:java -version
或者直接在新立得軟體包管理器裡面查找sun-java6-jdk
安裝即可
3. 在虛擬機Linux系統中如何安裝java,安裝好了,最後一步怎麼檢測不出版本號呢
從java官網下載java安裝包,如果是centos/rhel就下載.rpm包,然後rpm -ivh jre-... ,安裝完成之後再運行java -version就可以了
4. 怎樣在虛擬機的linux系統上安裝java和tomcat 程序
一、製作ISO
將需要安裝的jdk和tomcat安裝包做成ISO,可利用UltraISO等軟體。
jdk的後綴名是.bin,這里把它叫做jdk.bin
tomcat的後綴名是tar.gz,這里把它叫做tomcat.tar.gz
二、點擊「虛擬機」—>「設置」—>找到剛剛製作的安裝包,點擊確定
三、掛載,輸入命令 mount /mnt/cdrom/
這樣cd /mnt/cdrom/ ,然後 ls -l,可以看到兩個安裝包
四、安裝jdk
1、將jdk安裝包復制到/home/ 目錄
cp jdk.bin /home/
2、到/home/目錄
cd /home/
3、運行安裝包
./jdk.bin
會發現home目錄中有一個名為jdk1.X的文件夾,即安裝成功
五、安裝tomcat
1、將tomcat安裝包復制到/home/ 目錄
cp tomcat.tar.gz /home/
2、到/home/目錄
cd /home/
3、運行安裝包
tar -zxvf tomcat.tar.gz
會發現home目錄中有一個名為tomcat的文件夾,即安裝成功
六、配置環境變數
1、利用vi編輯器編輯文件 vi /etc/profile/
2、在最後追加後保存即可,這樣環境變數也配置完成了。
JAVA_HOME=/home/jdk
PATH=$PATH;/home/jdk/bin
CLASSPATH=.;/home/jdk/lib/rt.jar
CATALINA_HOME=/home/tomcat
export JAVA_HOME PATH CLASSPATH CATALINA_HOME
七、遇到問題
在linux下安裝好tomcat啟動時報如下錯誤:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
原因:找不到jdk或者jre路徑。
解決辦法:在setclasspath.bat的開頭聲明環境變數,打開tomcat的bin目錄下面的setclasspath.sh,添加紅色部分,路徑修改為自己機器jdk和jre路徑即可。
# -----------------------------------------------------------------------------
# Set CLASSPATH and Java options
#
# $Id: setclasspath.sh 795037 2009-07-17 10:52:16Z markt $
# -----------------------------------------------------------------------------
export JAVA_HOME=/home/jdk
export JRE_HOME=/home/jdk/jre
# Make sure prerequisite environment variables are set
5. 如何用eclipse中java控制linux中虛擬機中的hbase資料庫
一、新建本地java工程
file->new->java project
二、添加jar包和配置文件
1、添加JAR包
右擊Propertie在彈出的快捷菜單中選擇Java Build Path對話框,在該對話框中單擊Libraries選項卡,在該選項卡下單擊
Add External JARs按鈕,定位到$HBASE/lib目錄下,並選取如下JAR包。
hadoop-core-1.0.0.jar
commons-loggings-version.jar
commons-cli-version.jar
commons-lang-version.jar
commons-configuration-version.jar
hbase-0.94.1.jar
zookeeper-3.4.3.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.16.jar
protobuf-java-2.4.1.jar
2、添加hbase-site.xml配置文件
在工程根目錄下創建conf文件夾,將$HBASE_HOME/conf/目錄中的hbase-site.xml文件復制到該文件夾中。通過右鍵
選擇Propertie->Java Build Path->Libraries->Add Class Folder。
3、windows下開發HBase應用程序,HBase部署在linux環境中,在運行調試時可能會出現無法找到主機,類似異常信息如下:java.net.UnknownHostException: unknown host: master
解決辦法如下:在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下信息
192.168.2.34 master
6. 鉶氭嫙鏈烘湁鍝浜涗駭鍝佺被鍨嬶紵
鉶氭嫙鏈哄垎涓夊ぇ綾伙細
1.緋葷粺鉶氭嫙鏈猴細Linux鉶氭嫙鏈恆佸井杞鉶氭嫙鏈恆丮ac鉶氭嫙鏈恆丅M鉶氭嫙鏈 銆丠P鉶氭嫙鏈恆丼Wsoft鉶氭嫙鏈 銆丼UN鉶氭嫙鏈恆両ntel鉶氭嫙鏈恆丄MD鉶氭嫙鏈恆丅B鉶氭嫙鏈虹瓑絳夌被鍨嬨
2.紼嬪簭鉶氭嫙鏈猴細Java鉶氭嫙鏈(涔熺О涓: JVM) 絳夈
3. 鎿嶄綔緋葷粺灞傝櫄鎷熷寲錛欴ocker瀹瑰櫒銆
鎸戦夊父瑙佺殑鏉ョ畝榪幫細
Linux鉶氭嫙鏈猴細
涓縐嶅畨瑁呭湪Windows鐢佃剳涓婄殑鉶氭嫙linux鎿嶄綔鐜澧冿紝灝辮縐頒負linux鉶氭嫙鏈恆傚畠瀹為檯涓婂彧鏄涓鏂囦歡鑰屽凡錛屾槸鉶氭嫙鐨刲inux鐜澧冿紝鑰岄潪鐪熸f剰涔変笂鐨勬搷浣滅郴緇熴備絾鏄瀹冧滑鐨勫疄闄呮晥鏋滄槸涓鏍風殑銆傛墍浠ュ畨瑁呭湪鉶氭嫙鏈轟笂浣跨敤濂姐
JAVA鉶氭嫙鏈猴細
Java鉶氭嫙鏈猴紙JVM錛夛細鏄疛ava Virtual Machine鐨勭緝鍐欙紝瀹冩槸涓涓鉶氭瀯鍑烘潵鐨勮$畻鏈猴紝鏄閫氳繃鍦ㄥ疄闄呯殑璁$畻鏈轟笂浠跨湡妯℃嫙鍚勭嶈$畻鏈哄姛鑳芥ā鎷熸潵瀹炵幇鐨勩侸ava鉶氭嫙鏈烘湁鑷宸卞畬鍠勭殑紜浠舵灦鏋勶紝濡傚勭悊鍣ㄣ佸爢鏍堛佸瘎瀛樺櫒絳夛紝榪樺叿鏈夌浉搴旂殑鎸囦護緋葷粺銆