Java中static内存分析

一、static的作用和特点

static 可以 作用与  成员变量, 成员方法, 内部类 ,  静态代码块 
        a. 作用于 成员变量和成员方法上:1. 是属于 这个类的,对内部所有的对象共享,推荐使用 类名.方法。 2.static修饰的成员变量,存放在内存的方法区
        b. 作用于 内部类 :内部类是不持有外部引用。不能使用外围所有 非static方法。
        c. 作用于静态代码块:静态代码块优先于非静态代码块执行,(静态代码块 -> 非静态代码块 -> 构造方法)


       特点:随着类的加载而加载,类中所有对象共享,static 中没有 this关键字。

二、static变量存储位置

存储在JVM 的方法区,static属于类不属于对象,推荐使用 类名.方法。

三、用static静态变量潜在性问题

        1.占用内存 

        2.系统内存不够时,回去回收 静态内存

        3.android中不能将 Activity 作用 静态对象,会将对象存于全局内存中,并且不会被回回收。

四、静态变量的生命周期

启动一个app时,创建一个进程和创建一个Dalvik vm 的事例,运行在DVM 上,类的加载,卸载,垃圾回收都是在  DVM 上的,类被加载,静态变量被分配内存。

五、静态变量何时销毁

       默认情况下,类是被classLoader 加载的,而classLoader的生命周期和进程是一致的。

六、.静态引用的对象回收

静态变量没有呗销毁没有置为null,就会一直存在,引用计数会一直不为0,单例对象在运行时,不会被回收。


- 七、静态方法变量内存图

public class Demo{

        public static void main(String[] args) {

            Dog.name = "缓缓";

            Dog.age = 10;

    

            Dog.name = "多多";

            Dog.age = 4;

            Dog.showNameAge();

        }

    }

执行流程:

先将Demo.class 文件加载到内存中,放入字节码区,将内部的静态变量和静态方法,静态区,执行 main方法 入栈,执行Dog. class文件,加载静态变量和静态方法到静态区,执行name和age区静态区寻找执行。

八、静态变量和成员变量的区别

     1.   静态变量  是属于类的,存储在方法区,随着的类加载而加载,

     2.    成员变量   属于对象,存储在 堆中,随着对象的创建而创建

 

九、 基本数据类型的 存储位置

        局部变量存储位置(方法参数)

                当程序调用 方法时,会创建一个 方法栈,其中声明的变量,就存放在 方法栈中,执行结束,方法栈弹出,里面的局部变量也会被销毁

                方法中定义的基本变量  存放在 jvm的 栈中。  方法中定义的引用类型 的地址值存放在栈中,指向的对象存放在堆中。

        成员变量存储位置

                因成员变量依存与对象,对象的存放在堆中,成员变量也存放在 堆中。

                成员变量为 基本类型 会存放于堆中。  成员变量为 引用类型时,变量会存放一个 对象的地址, 指向 对应对象的堆中。

        静态成员变量存储位置

               随着类的加载而加载  存储在JVM方法区。使用类名调用。

看下来的这例子

int[] array=new int[]{1,2};

由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中,这也就很有效的反驳了基本数据类型一定是存储在栈中

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值