程序装载及执行说明

来源:互联网 发布:淘宝怎么上架虚拟商品 编辑:程序博客网 时间:2024/06/06 20:21

 

 

程序执行流程:

java 程序代码执行流程:

   java源文件----->java编译器------>java字节码(class文件)----->类装载器------>

                  java解释器/编译器加载到运行时系统(java虚拟机)----->操作系统---->硬件

 

 

怎样把程序装载到操作系统中?

     系统给每个程序把内存分成四个分区:

             第一个是.data区:存放的是程序的数据,静态的常量。

             第二个是.code区:程序的执行代码,编译成可执行的内存代码(0011二进制数据),

                                            加载到系统内存中。

             第三个是:栈空间:在程序运行的时候使用的空间,最好不要超过6M(windows下一般是6M) 。

                                           是连续的空间,所以访问速度和效率会比堆空间要高。

             第四个是:堆空间:是不连续的空间,会有一些碎片。

 

          说明:程序执行在code区,找到程序的主入口(Main函数)。从上往下执行代码,为函数中的变量

                      在栈空间中开辟内存空间,存储变量值。在code区中调用其它子函数。而当子函数执行完毕后,

                      为子函数变量分配的栈空间,要进行出栈操作,而这块内存空间就被清空掉,就不可再被使用的

                     (栈的回收,是操作系统的特性去实现的)。

 

                 在c语言程序中,可以通过malloc动态的申请一块内存空间,这块内存空间就是在堆内存中的。

 

                 而java中new Oject是在堆内存中存放这个对象的,而java虚拟机的垃圾回收机制就是去扫描堆内存

                 中的数据,若发现堆内存中的数据,在栈内存中没有引用的, 就会把这个对象回收。

                 例:person p = new person();可以分为下几步:

                        一,是定义了一个person的变量p(在栈内存中)。二,在堆内存中new出一个person对象。

                        三,把person对象的引用传给p。

 

                 而若定义person q; q = p;则是在栈空开辟了一块q的空间,然后再把p中的地址附给了q,

                 这样p和q就是指向相同的地址值,指的就是同一个对象,它们都可以 修改这个对象中的值,

                 而只有当p和q都null时, java虚拟机才会释放person对象。而p和q在栈内存中也有一定的

                 作用范围的,当p和q所在的方法执行完毕时,p和q的作用空间就失效了,就会执行出栈操作。

               

                 c语言比java执行效率高,是因为c语言可以由用户自己申请内存空间,用户自己释放内存空间。

                  而java是程序员自己把对象都至成Null,然后等待垃圾回收器去回收游离的对象,程序员无法

                  控制对象何时被回收。

 

 

c、c++语言程序泄露的原因?

                  就是程序员在堆内存中申请了过多的空间,用完之后又没有释放,就会导致内存泄露。

                 内存泄露特点:就是会随着程序运行的时间,占用的内存会起来越多。最后程序所申请的堆内存,

                                          会超过操作系统所提供的内存。

                                          因为堆内存是不连续的,所以就能申请到系统中所有的剩余内存。

 

说明:不管是java、linux、windows程序都是需要加载到内存中,才能被执行的。

                             

原创粉丝点击