美文网首页Java学习笔记
coreJava_1——Linux下安装配置jdk及Java程序

coreJava_1——Linux下安装配置jdk及Java程序

作者: panda_Hi | 来源:发表于2018-07-26 19:45 被阅读8次

    一、jdk环境配置

    1、在终端中找到已下载好的jdk包位置,如jdk-8u91-linux-x64.tar.gz,在/home/Desktop

    2、将文件解压放在/opt

    sudo tar -xzvf jdk-8u91-linux-x64.tar.gz -C /opt

    注:

    -c建立压缩文件

    -x解压缩文件

    -z使用gzip压缩

    -v显示所有过程

    -f指定创建的文件名(注意-f后边只能接文件名,如-fc test.tar.gz错误)

    3、为方便后期jdk的升级维护等,建立软链接(或快捷方式):到解压目录下,建立名称为jdk的软链接指向解压后的jdk1.8.0_91 jdk

    cd /opt

    sudo ln -s jdk1.8.0_91 jdk jdk

    4、配置初始化文件(注意修改>bashrc前做好备份)

    cd ~

    vim .bashrc

    在最后添加以下内容:

    export JAVA_HOME=/opt/jdk   

    export CLASSPATH=$CLASSPATH:.

    export PATH=$JAVA_HOME/bin:$PATH

    注:JAVA_HOME :指定jdk的安装目录,配置的目的是其他

    第三软件启动的时候会默认到环境变量中加载JAVA_HOME

    e.g. : tomcat(服务器)

    CLASSPATH java程序执行被装载到JVM虚拟机中(内存中)

    JVM虚拟机通过CLASSPATH找到你编写的代码

    PATH: 可执行的命令存放的路径,将来命令的执行就是基于PATH找到的

    (注:1. PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

    2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。

    javac -c  路径 (可以指定class文件存放目录)

    java -cp  路径  (可以指定要执行的class目录)

    3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

    5、保存退出

    6、验证

    运行java、javac、java -version

    二、jdk目录结构

    bin: 存放java的执行命令,该目录应当保存到PATH变量中

    Lib:是JDK工具用到的类库及其他文件,eg:tools.jar就包含了对开发工具的支持功能库

    jre: java的运行环境(包含了java的类库和JVM虚拟机)

    src.zip:jdk提供的类库的java代码

    db:jdk自带的小型数据库

    Include:包含c语言编写的文件

    jre/lib/rt.jar jdk提供的类库的字节码 ,

    对应的java代码在src.zip

    三、Java特点

    1、加速开发,写一次,到处运行,支持程序多线程的出来,动态的支持升级及编译

    2、没有指针,不需要管理内存,纯粹的面相对象编程

    3、提供gc的支持

    4、垃圾回收器(GC)

    垃圾回收器:java中有一个线程,专门负责JVM中垃圾内存的释放

    垃圾:没有引用的内存节点

    5、垃圾回收的算法

    注意:有垃圾回收相关方法java.lang.System.gc()、java.lang.Runtime.gc(),但还是无法控制垃圾回收机制

    算法有:标记-清除,复制,标记-整理,分代收集

    四、Java程序执行的整个流程

    Hello.java- -编译 ->Hello.class- ClassLoader装载- ->JVM- ->字节码验证

    - ->对字节码逐行解析(解释执行)- ->执行

    - ->JIT(即时编译) - ->执行

    五、JVM装载.class文件到内存的双亲委托机制

    1、启动级类加载器(Bootstrp ClassLoader)用C++语言写的,它是在Java虚拟机启动后初始化,它主要负责加载%JAVA_HOME%/jre/lib,

    -Xbootclasspath参数指定的路径

    以及%JAVA_HOME%/jre/classes中的类

    2、扩展级类加载器(Extension ClassLoader)用java语言写的,它负责将%JAVA_HOME%/jre/lib/ext或者由系统变量 java.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。

    3、本地类加载器(Applicaiton ClassLoader)用java语言写的,用于加载我们自己定义编写的类,它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,因此一般称为系统(System)加载器

    4、双亲委托机制加载类的过程

    当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器扩展级类加载器去完成。

    当扩展级类加载器加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。

    如果启动级类加载器加载失败,会使用扩展级类加载器来尝试加载;

    若扩展级类加载器也加载失败,则会使用本地类加载器来加载,

    如果本地类加载器也加载失败,则会报出异常ClassNotFoundException。

    案例:如果把编译后生成的.class打包为.jar,并把该jar包移到扩展级类的目录下(如%JAVA_HOME%/jre/lib/ext),那么运行java hello仍可成功运行。

    相关文章

      网友评论

        本文标题:coreJava_1——Linux下安装配置jdk及Java程序

        本文链接:https://www.haomeiwen.com/subject/heqimftx.html