`
annan211
  • 浏览: 463181 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java static 类型变量定义技巧

    博客分类:
  • jvm
 
阅读更多
  java 变量的定义非常重要,在一定程度上可以减轻服务器压力,提升服务器响应速度。
 今天以简单的static 标识符入手。
  Java 规范中 定义的static 标识符,这里简单点分析,修饰变量时分为 全局静态变量和局部静态变量,修饰类的时候 ,也可以分为 静态类和内部静态类。这里不再赘述。
  变量的定义,直到虚拟机解析的时候才真正具有现实意义,所以选定一款虚拟机也很重要。虚拟机也可以选择?是的,虚拟机多种多样,不是只有一种,比如当下流行的hotSpot ,JRockit,以及IBM的J9等等。这里我们以 sun 默认的虚拟机 hotSpot 为例,。
  虚拟机载入类文件之后,会在内存当中分配不同的区块,当前比较流行的区块为,堆内存,Java虚拟机栈,程序计数器,方法区,和 本地方法栈,其实虚拟机还需要一部分的直接内存(Directy Memory)。堆内存主要存储所有的类实例和数组,Java虚拟机栈主要用于存储局部变量表,操作栈,动态连接,方法出口等信息,这里的局部变量表就是普通程序员所说的堆栈概念,其实是比较以偏概全的。程序计数器可以理解为 记录 字节码的行数,大小可以忽略。本地方法栈 在有些厂商的实现中直接和Java虚拟机栈合二为一,基本功能差不多,方法区则存放虚拟机加载类的相关信息,如类、静态变量和常量。
 
   static 修饰 变量的时候,只会被初始化一次,并且所在内存不再改变。不管所在的方法是否被调用,所在的类是否被实例化调用,变量是一直存在的,直到整个jvm 退出,才会被回收器回收。根据回收器类别和性能的不同,变量的定义也会对虚拟机性能有影响。
   假设我们把static 变量大量定义在不同的方法和类中,那么就会在方法区产生大量的不连续的存储单元,当虚拟机需要更多的方法区空间来存储类信息和常量的时候,或者由于堆的扩容需要减小方法区大小的时候,再或者虚拟机需要更大的连续的方法区空间来存储的时候,由于程序仍在执行,所以就不会把方法区里已经不再被使用的静态变量清除掉,虽然有大量的空间存在,但是由于他们不是连续的(有一种情况例外,有一种回收器使用的是复制算法,即将存储空间分为不等的几块,每次使用时只使用其中的较大的一块,如果虚拟机需要更多的空间的时候,会将较大存储空间的还存活的地址复制到较小的单元),虚拟机无法分配更多的空间,只能抛出StacksOverFlowException.虽然虚拟机优化主要以堆为主战场,但是细微的地方仍可以在虚拟机比较脆弱的时候带来可观的收效。
   鉴于以上的分析,可以得出 虚拟机优化的细微,我们还可以做到更多。尽量减少static 变量的数量,避免将static变量分散定义,最好定义在同一个地方,没有必要就最好不要定义为static.
分享到:
评论

相关推荐

    java中如何使用Static的变量和方法.doc

    - **常量定义**:常量通常定义为`static final`类型,确保其值在程序运行过程中不会改变。 - **工具类**:工具类通常只包含静态方法,这些方法提供了对常见任务的支持,如字符串处理、数学运算等。 - **单例模式**:...

    java中static属性学习

    本文详细介绍了Java中的`static`属性,包括静态成员变量、静态方法以及静态语句块的概念和使用方法。通过具体的代码示例,我们不仅了解了`static`关键字的基本用法,还深入探讨了静态成员变量如何在整个类之间共享,...

    java 程序 环境变量修改

    2. **PATH**: `PATH`环境变量定义了系统在执行命令时搜索可执行文件的路径。当我们在命令行输入`java`命令时,操作系统会在`PATH`变量指定的各个目录下寻找名为`java.exe`的文件。因此,我们需要将`JAVA_HOME/bin`...

    java中final和static的区别

    Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。下面是 final 关键字的各种用法: 1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成...

    java 变量、关键字

    Java中有许多关键字,包括但不限于`class`、`interface`、`extends`、`implements`、`public`、`private`、`protected`、`static`、`final`、`void`、`int`、`float`、`double`、`boolean`等。这些关键字定义了Java...

    final和static用法详解JAVA

    final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前必须被初始化。 static 关键字是 Java 中的一种访问修饰符,用于修饰变量、方法和块...

    java flex 对象定义

    ### Java Flex 对象定义与数据类型定义 在Java编程语言中,对象是程序的基本单元,而数据类型则是定义这些对象属性的关键元素。本篇将深入探讨Java中的对象定义及其相关的数据类型定义,帮助读者更好地理解Java的...

    Java中的成员变量

    Java中的成员变量在定义时可以有默认的初始值,如下所示: - 整型(int, byte, short, long):0 - 浮点型(float, double):0.0f, 0.0d - 字符型(char):'\u0000' (空字符) - 布尔型(boolean):false - 引用...

    java变量的生命周期与作用域

    方法作用域是指变量定义在方法内部的作用域,块作用域是指变量定义在块内部的作用域,类作用域是指变量定义在类内部的作用域,而实例作用域是指变量定义在实例内部的作用域。 在 Java 中,变量的生命周期和作用域是...

    Kotlin+变量定义+函数定义+数组+实例

    Kotlin是一种在Java虚拟机上运行的静态类型编程语言,由JetBrains公司开发,旨在解决Java开发中遇到的一些问题,并且能够和Java代码互操作。它是一种现代化的编程语言,比Java更简洁,并且拥有许多能够提升开发效率...

    关于Java变量的可见性问题Java开发Java经验技巧共

    首先,Java变量有四种基本类型的可见性: 1. **本地变量(Local Variables)**:在方法、构造器或者块内部定义的变量,只在其声明的范围内可见,即从声明位置到该块的结束。它们不在类的任何实例或静态上下文中存在...

    JAVA类的定义txt格式

    根据提供的文件信息,我们可以深入探讨Java类的基本定义与构造,以及如何在Java中定义一个类、类中的属性、构造函数、方法等基本概念。 ### Java类的定义 Java是一种面向对象的编程语言,其核心是类(Class)的...

    Java关键字final、static使用总结

    在Java语言中,`final`关键字被广泛应用于各种场景,如定义不可变的变量、禁止类的继承等,具有重要的作用。 1. **final修饰变量** - `final`用于修饰变量时,该变量将变为常量,其值一旦初始化后便不能再更改。 ...

    Java变量常量声明和定义原理解析

    "Java变量常量声明和定义原理解析" Java变量常量声明和定义原理解析是Java编程语言的基础知识之一,对于初学者和开发者来说都是非常重要的概念。下面是对Java变量常量声明和定义原理解析的详细介绍: 一、常量和...

    java常量变量表达式

    在Java中,常量变量表达式是编程时常见的概念,它们涉及到如何定义、使用和管理不可变的数据。 1. 常量变量: 在Java中,常量是不可更改的值,通常使用关键字`final`来声明。例如: ```java final int MAX_SIZE = ...

    Java变量笔记

    Java 中的变量主要分为以下几种类型: - **局部变量**:在方法、构造器或块中定义的变量。 - **实例变量**:在类体中声明但位于任何方法之外的变量。 - **类变量(静态变量)**:用 `static` 关键字修饰的变量。 - *...

    Java 变量类型总结.docx

    Java编程语言中有三种类型的变量:类变量(静态变量)、实例变量和局部变量,每种都有其特定的用途和生命周期。 1、类变量(静态变量) 类变量,也被称为静态变量,使用`static`关键字声明,存在于类的静态存储区。...

    Java变量类型常见面试题及答案

    Java变量类型是编程基础,也是面试中经常被问到的话题。理解这些概念对于任何Java开发者都至关重要。在Java中,变量分为两类:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 一、...

    Java语言中变量和方法的分析及其应用.pdf

    类变量是定义在类内或接口内、方法外且用static修饰符修饰的变量。类变量又称为静态变量,是类的变量,不属于任何对象。 方法在Java语言中也分为两种:类方法(静态方法)和实例方法。类方法是使用static修饰符修饰...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    在Java编程语言中,变量是存储数据的...了解这三种变量类型及其特性对于理解和编写Java程序至关重要,特别是在处理对象状态、类共享数据以及方法内部逻辑时。掌握这些基础知识将有助于编写出更加健壮、可维护的代码。

Global site tag (gtag.js) - Google Analytics