Windows系统环境变量、JAVA环境变量配置以及JVM加载过程
一:用户变量和系统变量的区别
右击我的电脑、属性、高级系统设置、环境变量。
对话框的上面为Administrator的用户变量,对话框的下面为系统变量。我们所说的环境变量一般指系统环境变量,对所有用户起作用 ,而用户环境变量只对当前用户起作用。
有的时候我们会看到在用户变量和系统变量中都存在某一个环境变量,比如path(可运行文件的搜索路径), path变量的值是用户变量中的值与系统变量中的值的叠加。(即用户变量path的值其实是 用户变量设置中的path值 和 系统变量中的值都有)。
例如:
用户变量中的Path:
C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\;G:\Android\sdk\platform-tools;G:\altera\13.1\modelsim_ase\win32aloem
系统变量中的Path:
C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramFiles\ATITechnologies\ATI.ACE\Core-Static;G:\matlab\runtime\win32;G:\matlab\bin;C:\ProgramFiles\Java\jdk1.8.0_91\bin;%QUARTUS_ROOTDIR%\bin;G:\git\Git\cmd;D:\MySQL\bin;
在命令窗口中,这些可执行文件都可以直接运行,而不用去某个具体的文件夹下运行。
这个问题在linux下面就相对好理解一些,系统变量都在/etc/profile文件里面,而用户的变量则在~/.bash_profile(如果用的是bash的话),每个用户的用户目录对其他用户不可见。假设有a,b,c三个用户,你在a的变量文件中写入语句在屏幕上述出a,在b的输出b,c的什么都不输出,系统文件输出sys,那么当你用a用户登陆时,输出a;用户b登陆输出b,用户c则输出sys.
参考:http://www.cnblogs.com/zhwl/p/3338294.html
Windows系统变量汇总:http://blog.163.com/cayyenne%40126/blog/static/121862614201019082750/
二:Java环境变量配置
Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。
(1)JAVA_HOME指向的是JDK的安装路径。设置方法:JAVA_HOME= C:/Program Files/Java/jdk1.6.0_21。
(2) PATH环境变量原来Windows里面就有,你只需添加一个路径(JDK的bin目录路径):%JAVA_HOME%/bin 。(%%引起来的其实就是引用上一步设定好的环境变量JAVA_HOME,直接写成C:/Program Files/Java/jdk1.6.0_21/bin也是可以的)。
(3)CLASSPATH环境变量, 作用是指定类搜索路径,JVM就是通过CLASSPATH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。这里CLASSPATH为:CLASSPATH= .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
三:JVM的ClassLoader加载流程
(1)JVM启动,运行bootstrap classloader(启动类加载器),该加载器自动加载了Java核心API(其中包括ExtClassLoader和AppClassLoader),这些基础类库在%JAVA_HOME%\jre\lib目录下。(补:通过亲委派模型保证了基础类库只会被Bootstrap ClassLoader加载,这也就保证了基础类的唯一性)
(2)然后调用ExtClassLoader加载扩展API,这些扩展类库在%JAVA_HOME%\jre\lib\ext目录下,有时候我们也要自己import这里面的类,但是并没有基础类库用的频繁。
(3)最后,AppClassLoader加载CLASSPATH目录下定义的class,(二)中设置的dt.jar和tools.jar似乎与远程调用和UI有关(一般用不到)。
一般情况下我们不设置CLASSPATH也没关系,具体原因参考下面两篇博文:
《java 也可以不配置 classpath》http://blog.csdn.net/deitytu/article/details/11533123
《详细说明JDK环境变量中dt.jar、tools.jar等变量值的作用》 http://blog.csdn.net/ns_code/article/details/18547959
Windows系统环境变量、JAVA环境变量配置以及JVM加载过程的更多相关文章
- Windows 7下配置JDK环境变量,JAVA环境变量配置,Tomcat服务器的使用
参考来源: http://www.cnblogs.com/pannysp/archive/2012/03/07/2383364.html 1. 常识: 1.1 War包 War包一般是在进行Web开发 ...
- Windows 10 设置 Java 环境变量
首先你需要在我的电脑中打开,找到环境变量属性. 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面. 在这个界面中设置高级系统设置. 环境变量 在弹出的界面中选择设置环境变量. 系统变量 ...
- windows下,java环境变量的设置,设置点击startup.bat启动tomcat
1.首先.安装好java jdk以后环境变量设置: CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar JAVA_HOME:C:\ ...
- Java web 项目 web.xml 配置文件加载过程
转载自:http://blog.csdn.net/luoliehe/article/details/46884757#comments WEB加载web.xml初始化过程: 在启动Web项目时,容器( ...
- Linux中如何设置java环境变量
这里介绍Linux下如何设置java环境变量. 工具/原料 Linux java环境变量 方法/步骤 1 查看java的安装路径 查看java执行路径 配置java环境变量 java的安装 ...
- 利用脚本,一键设置java环境变量(默认安装路径)
Windows一键设置Java环境变量 右击以管理员方式运行,注意自行更改JAVA_HOME目录文件安装目录. JDKSetting.bat @echo off color 0a echo.----- ...
- Windows 下java环境变量的配置(Windows7 ,8,8.1,10)
Windows 下java环境变量的配置 在“系统”面板的左上角选择“高级系统设置”,在弹出的系统属性中选择”高级“项,然后点击右下角的“环境变量(N)...”,就此进入JAVA环境变量的配置. 如果 ...
- Windows 10 Java环境变量配置
Win10下 Java环境变量配置 首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/ ...
- Windows 7下配置JDK环境变量和Java环境变量配置
下面来介绍一下Java环境变量配置,是在Windows 7下配置JDK环境变量. 方法/步骤 1 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\Program Fil ...
随机推荐
- nodejs-循环
for循环 for(var key in object){ consol.log('wor' : key); } 来自为知笔记(Wiz)
- [SQL]选取随机行
在sql server中语句如下: select top 10 * from recordTable order by NEWID();
- APP为什么签名,使用keytool jarsigner进行签名
签名(sign):在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核.过程:使用私有密钥数字地签署一个给定的应用程序 作用: 识别应用程序作者 检測应用程序是否发生改变 有种程序 ...
- cocos2d-x 3.2 之 2048 —— 第五篇
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 开源ext2read代码走读之-在windows下怎样推断有几个硬盘设备?
int get_ndisks() { HANDLE hDevice; // handle to the drive to be examined int n ...
- Mongo——C#操作
自己练手写了一个MongoDb的泛型类,顺便把一些常用命令整理了一下,做个记录: /// <summary> /// Mongo操作类. /// </summary> /// ...
- Spark Streaming概念学习系列之Spark Streaming的竞争对手
不多说,直接上干货! Spark Streaming的竞争对手 Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology).这个拓扑将会被提交给集群,由集群中的 ...
- Rabbit MQ 学习 (一)Window安装Erlang环境
之前也没有用过Rabbit MQ ,最近正在学习中,记性不好,特意记一下. 百度一下 先得 安装 Erlang 并且 设置环境变量. 在Erlang 官网去下载,那个慢呀... 还好CSDN 里有人提 ...
- 源码编译Oprofile
上菜了翠花:首先编译Oprofile需要三个源码:binutils.popt与oprofile Linux版(由于是在64位的linux系统编译-----敬请参考“在64位linux上编译32位程序” ...
- Edge 通过代理无法打开网页,解决方案
netsh winhttp import proxy source=ie