被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)
相关推荐
这使得静态成员方法能够访问类的静态成员变量和其他静态成员方法,但反之则不行。 静态成员方法在功能上类似于全局函数,但它们仍然属于类的一部分。它们常被用于那些与具体对象状态无关,而与类本身状态相关的操作...
- **存储位置**:静态变量存储在方法区的静态池中。 - **生命周期**:随着类的加载而存在,随着类的消失而消失。 - **共享性**:所有对象共享同一个静态变量的副本,对静态变量的修改会影响到所有对象。 #### 5. `...
易语言是一种国产的编程语言,它的设计目标是让编程变得更加简单和直观。...希望以上内容能帮助到你,如果你对易语言变量有更多的疑问或需要更深入的探讨,欢迎继续查阅相关资料或搜索我们的其他文章。
此外,静态方法只能访问静态成员,而不能访问非静态成员,因为非静态成员是在对象实例化时才存在的。 ### const和static readonly的区别 `const`关键字用于声明编译时常量,其值在编译时确定,并且不能更改。`...
类中可以定义成员变量(属性)和成员函数(行为),并通过访问控制关键字(`public`, `protected`, `private`)来限制对它们的访问。 18. **什么是对象?** - 对象是类的实例,它具有特定的属性值并能够执行类中定义的...
同时,理解变量的作用域也是至关重要的,包括局部变量(在方法内定义,生命周期只限于方法)、成员变量(属于类,可被类的所有方法访问)和静态变量(属于类,而非类的实例,所有实例共享同一静态变量的值)。...
这个压缩包包含了一系列关于C#核心概念的PDF文件,每一份都专注于特定的主题,旨在帮助理解和掌握C#的关键知识点。 首先,"01C#基本语法.pdf"是学习C#的基础,它涵盖了变量声明、数据类型、运算符以及控制流语句等...
当屏幕旋转时,系统默认会销毁当前Activity并重新创建,这就意味着所有的成员变量(包括正在运行的AsyncTask)都会被重置。为了避免这种情况,我们可以采取以下几种策略: 1. **配置变更的处理方式** - 默认行为:...
例如,你可以定义一个指向同一结构体类型的指针作为成员变量。 #### 2.13 怎样在运行时用名字访问结构中的域? 在C语言中,标准库并不直接支持通过名称动态访问结构体成员。然而,可以使用函数指针和`void*`指针...
在MFC中,这些控件可以通过资源编辑器添加到对话框模板,并与类成员变量关联起来。 **冒泡排序算法的实现**: 1. 定义一个数组,存储待排序的元素。 2. 使用两个嵌套循环来遍历数组。外层循环控制排序的轮数,内层...
- **类** 是C++的面向对象基础,它定义了一组数据(成员变量)和操作这些数据的方法(成员函数)。 - **对象** 是类的实例,通过`new`运算符创建。 - **封装** 将数据和操作数据的函数打包在类中,提高代码的安全...
静态成员属于类本身,而非静态成员属于类的实例。 #### 常量 定义不可更改的值。 #### 枚举 枚举是一组命名常量的集合,用于表示一组固定的值。 ### 第八章:装配件/固件匹配 确保所使用的.NETMF固件版本与...
4. **关于教材内容问题(包括错误和疑问)等数据结构技术性问题**:读者可以通过官方渠道反馈教材中存在的技术性问题或疑问,以便及时更正和解答。 #### 二、数据结构的一般问题 1. **伪代码到底是什么?** - 伪...
标题 "不知是什么问题程序能运行" 暗示可能是一个编程相关的疑问,描述中的 "烦您看看" 提示我们需要分析代码来找出问题所在。标签同样重申了问题的不确定性,表明程序虽然能够运行,但可能存在未知的问题或者异常...