被static修饰的静态成员变量网上说是存储在方法区中,那么我用测试代码测试了一下:
/** * -Xms10m -Xmx20m -XX:NewSize=5m -XX:+PrintGCDetails */ public class GCTest { static byte[] a1 = new byte[1024 * 1024]; static byte[] a2 = new byte[1024 * 1024]; static byte[] a3 = new byte[1024 * 1024]; static byte[] a4 = new byte[1024 * 1024]; public static void main(String[] args) { } }
这里就有个现象,既然是存储在方法区,为什么却是在堆区内分配内存?我不知道是不是可以这么理解,就是被static修饰的成员变量存储在方法区内的只是一个引用,而实际的值,如果是原始类型就存储在栈区(原始类型的成员变量存储在堆区中的实例数据中),而引用类型就存储在堆区,只是方法区中存储一个全局意义上的引用而已?
打印的GC日志如下:
[GC [DefNew: 3726K->387K(4608K), 0.0044174 secs] 3726K->3459K(9728K), 0.0044796 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] Heap def new generation total 4608K, used 1622K [0x327b0000, 0x32cb0000, 0x32e50000) eden space 4096K, 30% used [0x327b0000, 0x328e4d60, 0x32bb0000) from space 512K, 75% used [0x32c30000, 0x32c90c50, 0x32cb0000) to space 512K, 0% used [0x32bb0000, 0x32bb0000, 0x32c30000) tenured generation total 5120K, used 3072K [0x32e50000, 0x33350000, 0x33bb0000) the space 5120K, 60% used [0x32e50000, 0x33150030, 0x33150200, 0x33350000) compacting perm gen total 12288K, used 148K [0x33bb0000, 0x347b0000, 0x37bb0000) the space 12288K, 1% used [0x33bb0000, 0x33bd52f0, 0x33bd5400, 0x347b0000) ro space 10240K, 45% used [0x37bb0000, 0x38037290, 0x38037400, 0x385b0000) rw space 12288K, 54% used [0x385b0000, 0x38c3ace8, 0x38c3ae00, 0x391b0000)
相关推荐
C++静态成员变量和静态成员函数C++静态成员变量和静态成员函数
对C++静态成员函数和静态成员变量的使用方法和内部机制进行的经验总结
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
java 利用反射获取内部类静态成员变量的值操作.docx
在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...
详细地解说了static关键词,以及静态成员变量和静态成员函数
C++类中的静态成员变量和静态成员函数的作用
Java成员变量局部变量静态变量成员方法全局方法等概念的区别共3页.pdf.zip
C++的static关键字可修饰类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类的。仔细琢磨静态成员变量,会发现其与C++的方式既相容也矛盾,具有特殊性。 先说相容的一面。·C/C++·有声明和定义的说法:...
Java中的静态变量静态方法静态块与静态类.docx
静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
类中静态成员变量和普通变量的区别——实例代码(VS2010),已测试,没有问题。
静态成员变量和函数程序
1、讲解static静态局部变量的原理与特点; 2、讲解static静态全局变量的原理与特点; 3、讲解static静态成员变量的原理与特点; 4、讲解static静态成员函数的原理与特点;
静态成员变量在不创建类的对象的情况下,就可以使用,它被所有该类的实例所共享。 而普通非静态成员变量只能在创建了类的对象实例后才能使用,并且不是共享,而是属于具体的
C++ 静态成员变量 嵌套类分配回收内存
C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习...
数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态...