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铏氭嫙鏈烘湁鑷宸卞畬鍠勭殑纭浠舵灦鏋勶紝濡傚勭悊鍣ㄣ佸爢鏍堛佸瘎瀛樺櫒绛夛紝杩樺叿鏈夌浉搴旂殑鎸囦护绯荤粺銆