当前位置:首页 > 开发 > 编程语言 > Java > 正文

java static 类型变量定义技巧

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

java static 类型变量定义技巧

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
第36集 java static 变量,和方法从属于类 可以用类来直接调用static属性和方法 static方法不能调用
1、变量 三要素: 数据类型 变量名 变量值 首先,让我们来看看变量命名的规则 开头 字母、下划线、
Android中进度条控件有3个(不算ProgressDialog),分别是ProgressBar,SeekBar和RatingBar,对于自
(*)static(不变的)-关键字:修饰的变量叫做类变量,随着类的加载而加载,随着类的消失而消失, //
说明: 引用类型变量做参数时,如果对参数进行修改,则原先对象的值也跟着变化。原因:引用变量做参
Effective C++ 条款27的例子:用static_cast<*this>()表明类型转换的隐含问题。 转换之后操作
概述: 修饰方法和成员变量,一旦修饰被修饰,就属类所有,可以通过类直接调用。 静态代码块:主要
转载地址:http://snkcxy.iteye.com/blog/1828950 概述: 修饰方法和成员变量,一旦修饰被修饰,就
先看一个试题: 这道题的答案选择什么呢?! 我选择是 C 结果正确答案为D,我好像记得实例对象不可
JVM是怎么处理类和对象的呢? 类的生命分为装载、连接和初始化三步。其中连接又分为:验证、准备和解
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号