zoukankan      html  css  js  c++  java
  • java中程序的执行的原理如怎么创建空间,创建对象等

    这里举一个简单的例子:

                      public class Test{

                                    public static void main(String[] args){

                                               String s;

                                               s = "hello world"; 

                                                Student s1 ;

                                                s1 = new Student();//这里Student是引用类型

                                               System.out.println(s);

                                     }

                     }

    就这个简单的程序我来说一下其工作的原理,希望能有助于跟我一样的菜鸟:

                     编译器通过主类找到编译入口编译成class文件,通过加载类到内存中(加载,验证,解释和运行),java虚拟机通过类关联以及static找到主方法,在执行过程中java虚拟机可以传参,此时加载String[]这个类,利用String[],为此参数的类型,此时默认为NULL,String为引用类型,所以此时加载String类定义了一个局部变量,所以在栈区开辟空间s,又“hello world”为常对象,而方法区有静态数据区和常数据区,此时则在场数据区开辟空间,按此,新建对象时new 在堆区按照实例变量的类型开辟空间,此时new调用构造方法Student(),以及产生this指针,将这个堆里面的对象地址给S1,而方法区存放的自然是方法,此时system类也会加载到内存,此时则有了5个类5个对象4个方法。

    栈区 堆区 方法区

    s

    s1

    System.out

    System.in

    System.error

    还有Student这个类的对象

    加载了test类

    存放了hello world等

    这个列表没画的完全,仅供参考和学习。

  • 相关阅读:
    Servant:基于Web的IIS管理工具
    mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
    使用 OWIN Self-Host ASP.NET Web API 2
    Xamarin和微软发起.NET基金会
    SQLite vs MySQL vs PostgreSQL:关系型数据库比较
    Mono 3.2.7发布,JIT和GC进一步改进
    如何使用Microsoft技术栈
    c#开源消息队列中间件EQueue 教程
    通过一组RESTful API暴露CQRS系统功能
    NEsper Nuget包
  • 原文地址:https://www.cnblogs.com/qpxv/p/3757924.html
Copyright © 2011-2022 走看看