linux 下找不到或无法加载主类 Doo.class
错误原因:java -veriosn 是可以看到如下内容
查看环境变量配置, cat etc/profile 才知道CLASSPATH配置错误,原来配置为:CLASSPATH = $$JAVA_HOME/lib/ 正确配置如下:CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- java 代码运行在虚拟机,以Hotspot为例:
- java 程序编译成java字节码,由虚拟机把字节码编译成机器码执行,虚拟机可由硬件或者软件写成。
- 一般都是软件,即包含在JRE下的java虚拟机。JRE代表java程序执行的环境。包含虚拟机和java提供的核心类库。
- jdk包含jre和一些java工具,类库等等,比如常见的jps,jconsole 这些监控虚拟机的工具。
- 那么java代码是如何运行在虚拟机?如何提高期执行效率的呢?
- java虚拟机采用解释和即时编译的混合方式执行java代码,即将热代码采用即时编译器编译成机器码,其余的代码采用解释执行的方式,虚拟机采用双亲模式的类加载器将class类加载进入虚拟机内存,一般都是放在方法区。然后再线程启动后,线程会在栈区创建自己私有的局部变量,方法,对象的引用,栈区划分为PC寄存器,java方法栈,本地方法栈。
- 对象在堆内创建,栈区值包含引用,全部变量,常量一般是放在方法区。线程保存局部变量时,统一采用相同的字节保存,除了double,long。
- 常见的即时编译器为C1,C2,Graal.
- java虚拟机采用对20%热代码的即时编译提高了执行效率。