Java运行过程
2015-07-12 17:49
399 查看
随手笔记
当我们写完一个java程序或者做完一个java项目时,都会要进行运行,那么它是如何运行的呢?Java有它自己的一套流程。 Java的JRE(Java运行时环境)由JVM、API和函数库组成,而我们写的程序都是经过处理在JVM中运行。JVM也有它的一套东西,很多,包括内存的使用、类的加载等等,不精通,所以只写它大概运行的框架,日后再补充。
看下图:
![](http://img.blog.csdn.net/20150712163654213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Java的源码经过编译之后生成了字节码,只要在编译期间通过即可,因为Java语言是运行时的语言,它不是在编译期间编译完成之后就可以了,而是在运行的时候会进行动态的加载类,Java的反射机制就是这样:可通过类的具体名字得到该类的信息,包括属性,方法,父类,接口等等信息。也可以反过来创建实例。这也是动态链接的好处,如果是在编译时候就已经决定要调用哪个类,那么这样就无法在程序运行中无法动态的选择。也可举例子:两个工程师写代码,一个在项目中要调用另一个写的类,然而这个类还没写好,那如果要直接调用的话,那岂不是一片叉,如果改用反射的话,那么就可以直接通过类名来写代码,当第二个攻城狮写完了,第一个攻城狮也写完了,完成任务。
Java的代码都是要在 JVM 中去运行的,而需要将代码装载到JVM中,不可能一下子就全部装载完,会一步步的将运行到的类装载进JVM,首先从main函数开始,需要用到的类,如遇到new关键字则去加载相应的类,在加载之前会先去找它的夫类,以及静态区的属性等放到相应的内存区域,然后再加载子类的静态属性到内存区,最后在内存上分配实例化的属性等,一直到类加载完成,需要其他类则是相同的过程。
在连接的过程中JVM会进行相应的检测,如果有危险代码则不会运行。
下一步就是使用该类了,这一步则是我们调试程序时看到的,先进行调用那一步,再进行调用哪一步就和java的语法有关了。
最后这个类使用完了,那么JVM会将其卸载掉,相应的内存空间也应会释放掉。
先按理解的记着。
当我们写完一个java程序或者做完一个java项目时,都会要进行运行,那么它是如何运行的呢?Java有它自己的一套流程。 Java的JRE(Java运行时环境)由JVM、API和函数库组成,而我们写的程序都是经过处理在JVM中运行。JVM也有它的一套东西,很多,包括内存的使用、类的加载等等,不精通,所以只写它大概运行的框架,日后再补充。
看下图:
Java的源码经过编译之后生成了字节码,只要在编译期间通过即可,因为Java语言是运行时的语言,它不是在编译期间编译完成之后就可以了,而是在运行的时候会进行动态的加载类,Java的反射机制就是这样:可通过类的具体名字得到该类的信息,包括属性,方法,父类,接口等等信息。也可以反过来创建实例。这也是动态链接的好处,如果是在编译时候就已经决定要调用哪个类,那么这样就无法在程序运行中无法动态的选择。也可举例子:两个工程师写代码,一个在项目中要调用另一个写的类,然而这个类还没写好,那如果要直接调用的话,那岂不是一片叉,如果改用反射的话,那么就可以直接通过类名来写代码,当第二个攻城狮写完了,第一个攻城狮也写完了,完成任务。
Java的代码都是要在 JVM 中去运行的,而需要将代码装载到JVM中,不可能一下子就全部装载完,会一步步的将运行到的类装载进JVM,首先从main函数开始,需要用到的类,如遇到new关键字则去加载相应的类,在加载之前会先去找它的夫类,以及静态区的属性等放到相应的内存区域,然后再加载子类的静态属性到内存区,最后在内存上分配实例化的属性等,一直到类加载完成,需要其他类则是相同的过程。
在连接的过程中JVM会进行相应的检测,如果有危险代码则不会运行。
下一步就是使用该类了,这一步则是我们调试程序时看到的,先进行调用那一步,再进行调用哪一步就和java的语法有关了。
最后这个类使用完了,那么JVM会将其卸载掉,相应的内存空间也应会释放掉。
先按理解的记着。
相关文章推荐
- MyEclipse启动报错:Failed to load JavaHL Library.
- Eclipse和Android Studio下使用Google Gson解析Json数据示例
- Struts2之数据标签(一)
- mac下eclipse的快捷键
- springmvc json
- Eclipse CDT无法产生二进制文件问题。
- git下载Spring项目源码并构建为eclipse工程
- java中的重载与重写
- 《Spring技术内幕》笔记-第四章 Spring MVC与web环境
- Springmvc异步上传文件
- 第1章Java开发入门
- Java的文件名必须和公共类名相同
- Java的内部类
- IDEA下JAVA 调用GDAL读写tif文件
- Java的接口
- Java的访问控制符
- Java反编译
- 修改MyEclipse的Servlet的生成模板
- Java的多态
- thymeleaf 与 jsp 同时使用 for spring mvc