zoukankan      html  css  js  c++  java
  • 内存分配: 类变量、实例变量、成员变量、局部变量

    成员变量有2种:类变量和实例变量 类变量(又叫静态变量):前面加static关键字修饰; 1、 jvm把.class类加载到方法区里,然后在堆中为.class的类变量开辟内存;堆中的地址存放于栈以便高速访问; 2、类变量的生命周期一直持续到整个“系统”关闭; 3、一旦赋值它的值就在你new出来的任何一个实例中具有相同的值; 实例变量:前面不加static关键字修饰; 1、当你用java关键字new一个对象时,jvm将在堆里创建对象,并在堆中开辟空间给变量(空间不一定连续),然后根据零散的堆内存地址,通过哈希算法得到“物理地址”; 2、实例变量的生命周期:当实例变量的引用丢失后,将被gc回收,但并不是马上释放堆中内存; 3、每一个new出来的新实例都可以对他赋予自己需要的值 例子 class example{ static int a = 0; int b = 1; } a是类变量,b是实例变量 example e1 = new example(); example e2 = new example(); 改变e1中a的值会使e2中的a值也改变,而e1中b值的变化不会带来e2中b值的变化; 同一个jvm里,一个类变量只需要分配一个内存空间;对于实例变量,每创建一次对象,都需要为实例变量分配一次内存空间; ------------------------------------------------------------------------------------ 实例变量:声明在某方法,或某代码段里(如for循环) 1、执行它时在堆中开辟内存,其引用被置于一个连续的栈中提供高速访问; 2、当局部变量一旦脱离作用域,内存立即释放; 实例变量:在用该类创建对象时才在会出现并被赋值。 类变量(静态变量):在该类加载到VM中时就被赋值,且该变量被这个类的所有对象所共享。 同一类的不同的对象有自己的实例变量,但是它们共享同一个类变量。当一个对象修改了它的实例变量时,不会影响其他的对象各自的实例变量。如果一个对象修改了类变量,则对于其他对象来说这个值也被改变了。
  • 相关阅读:
    mysql触发器实时检测一条语句进行备份删除
    ORA-12560: TNS: 协议适配器错误 windows
    DG:windows密码文件
    vim already exists!
    k8s 集群升级
    部署 k8s 备份工具 velero
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    lens 添加 k8s 集群
    redis系列
    s3c2440裸机-I2c编程-3.i2c中断服务程序
  • 原文地址:https://www.cnblogs.com/ZoHy/p/12400688.html
Copyright © 2011-2022 走看看