共享静态变量存储空间
我们知道类中的静态变量(Static Variable)在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,因此在某些时候为了节省系统内存开销、共享资源,将类中的一些变量声明为静态变量,通过下面的例子,你可以发现合理应用静态变量带来的好处:
public class WeekB{
static class Data {
private int week;
private String name;
Data(int i, String s) {
month = i;
name = s;
}
}
static Data weeks[] = {
new Data(1, "Monday"),
new Data(2, "Tuesay"),
new Data(3, "Wednesday"),
new Data(4, "Thursday"),
new Data(5, "Friday"),
new Data(6, "Saturday")
new Data(7, "Sunday")
};
public static void main(String args[]) {
final int N = 200000;
WeekB weekinstance;
for (int i = 1; i <= N; i++){
weekinstance = new WeekB ();
}
}
}
请注意在类WeekB中,在Data weeks[]之前添加了static关键字,将该对象变量声明为静态的,因此当你创建200 000个WeekB对象时系统中只保存着该对象的一份拷贝,而且该类的所有对象实例共享这份拷贝,这无疑节约了大量的不必要的内存开销,同时实现了要完成的系统功能。
那么是不是我们应该尽量地多使用静态变量呢?其实不是这样的,因为静态变量生命周期较长,而且不易被系统回收,因此如果不能合理地使用静态变量,就会适得其反,造成大量的内存浪费,所谓过犹不及。因此,建议在具备下列全部条件的情况下,尽量使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多。
(2)变量所包含的对象生命周期较长。
(3)变量所包含的对象数据稳定。
(4)该类的对象实例有对该变量所包含的对象的共享需求。
如果变量不具备上述特点建议你不要轻易地使用静态变量,以免弄巧成拙。
分享到:
相关推荐
Java中的`static`关键字是用来声明静态变量或静态方法的,它是面向对象编程中非常关键的一个概念。静态变量属于类,而不是类的实例,这意味着它们在内存中只有一份拷贝,所有的类实例共享这个相同的变量。当我们声明...
### static静态变量使用@Value注入方式 #### 一、引言 在Java开发中,特别是基于Spring框架的应用程序中,开发者经常会遇到需要为类中的成员变量注入外部配置值的情况。Spring框架提供了多种注入机制,其中`@Value...
Java中的静态变量(static变量)是在类加载时初始化的,而不是在对象创建时。静态变量属于类,而不属于任何特定的对象,因此它们是共享的,所有类实例都可以访问。了解静态变量的初始化顺序对于理解和避免潜在的编程...
statilocal java 静态变量和静态块加载顺序,静态变量和同名静态变量块加载的顺序。
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也是说,它不...
在Java编程语言中,`static`关键字是用来声明静态变量和静态方法的,这些成员属于类本身,而不属于类的任何实例。静态变量,也被称为类变量,是存储在内存的类区域,而实例变量则是存储在堆内存中,每个对象实例都有...
Java 中的静态变量、静态方法、静态块和静态类 Java 中的静态变量、静态方法、静态块和静态类是 Java 编程语言的四个重要概念,它们之间存在着紧密的关系。下面将对这四个概念进行详细的介绍。 一、静态变量...
System.out.println("静态变量值: " + staticVar); } } ``` 在这个例子中,当程序启动时,首先会执行静态块,将`staticVar`初始化为10,然后在`main`方法中调用静态方法`staticMethod`。这清晰地展示了静态块和...
当我们讨论“Java static静态初始化块”时,我们关注的是如何在类加载时执行特定的初始化代码。 首先,让我们理解`static`关键字的基本概念。`static`在Java中用于声明类变量或静态方法,这些变量和方法不需要创建...
当你在类中声明一个静态变量时,Java虚拟机(JVM)在类加载时就会为它分配内存,因此,你可以通过类名直接访问静态变量,无需创建类的实例。例如: ```java public class MyClass { static int count = 0; } ...
Java中静态(static)变量、方法与实例变量、方法的规范-附件资源
`static`变量,亦称为静态变量或类变量,与实例变量相对。其最显著的特点在于,无论创建多少个该类的实例,`static`变量在内存中仅存在一份拷贝,这意味着所有实例共享同一份变量值。这不仅节约了内存资源,还便于...
Java static(静态变量)和私有化功能与用法分析 Java 中的 static(静态变量)和私有化功能是两个非常重要的概念,它们在编程中扮演着关键的角色。下面我们将深入探讨 Java static(静态变量)和私有化功能的相关...
例如,在类`EX3_1`中定义的`private static int sa`就是一个静态变量,无论创建多少个`EX3_1`的实例,`sa`的值都是一样的。在单例模式中,静态变量常用于确保类只有一个实例存在。 静态代码块是一段在类加载时执行...
由于我们有一个静态工具类`ClickHouseUtil`,其中的方法依赖于静态变量,所以我们不能直接使用`@Value`注解为静态变量赋值。Spring框架不允许在静态字段上直接注入值,因为它不支持实例化静态对象。 为了解决这个...
Java中static变量的几个优缺点 简单介绍static
但当成员变量前加上`static`关键字,这个变量就称为静态变量,或者叫类变量。静态变量不会为每个对象实例创建副本,而是所有实例共享同一份存储空间。这意味着,无论创建多少个对象,静态变量都只有一个实例,所有...
在Java中,可以通过`import static`语句来直接导入一个类中的静态成员(包括静态变量和静态方法)。这种方式可以避免重复输入类名,使得代码更加简洁易读。例如,在给定的代码片段中: ```java import static java....
Java之静态变量是编程中的一个重要概念,特别是在多线程环境下处理共享数据时。在Java中,静态变量属于类,而不是类的实例。这意味着无论创建了多少个对象,静态变量都只有一份拷贝,所有对象都能访问它。这个特性...