JVM加载类详情

  •      学习j2se,马士兵老师讲内存分析是如此的透彻,遇到这么精华的东西,让我不得不再写篇感悟博客以作总结和怀念,尽管这时候有软考的压力,但依然很过瘾。

        一提到j2se,一提到马士兵,我第一反应就是这张图。学习一门语言,知道内存,知道一切。

         

        

        不过,我想把内容再细化一些,所以下面有不少是自己的感悟,也许有的 理解是不合适的,也许有的理解等到学习j2ee时就会得到纠正,也许……,而唯一可以确定的是,这只是学习java的一个过程。

    写好一个.java文件,编译后,使用java命令运行。首先加载的类,肯定是和文件名相同的public类了。


    加载类详情:

     new 一个类时,JVM便在heap内存中为该对象分配一块地。

     加载类的顺序,先成员变量后方法;先静态,后非静态。

    1. 加载成员变量

    先加载static成员变量,放在datasegment内存区,始终只有一份,被同一类的每个对象共享。

    再加载非static成员变量,放在该对象占用的这块地里,如果没有初始化,JVM会帮我们处理这块地(初始化)。每个非静态成员变量在不同的对象中都有不同的值。


    2. 加载方法:

        方法放在code segment中,只有一份,被同一类的每个对象共享。

    先加载静态方法,放在codesegment内存区中,而main方法就是静态的,也是程序的入口点。他的寿命比较长,是这个类的整个生命周期。

        如果要访问静态方法,系统在codesegment中找一段具有标识性的代码段是很容易的,直接使用类名.静态方法名。

        再加载非静态方法,想要让堆中的对象找到codesegment中的这段代码,通过内部的函数指针就可以办到。new 类时,就需要执行构造方法了。(加载和执行可不一样)。

        1) 加载局部变量

    局部变量位于方法中,等到方法开始执行时,就该用到stack了。

     


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值