`
annan211
  • 浏览: 442841 次
  • 性别: 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 变量和数据类型

    定义了一个整型int类型的变量,名称为a初始值为1,不写初始值默认是0。 public class Text{ public static void main(String[] args) { int a=1; System.out.println(a); } } 变量的重要特点是可以重新...

    Java Scanner 类.pdf

    引用数据类型与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有相对固定的步骤或格式: 数据类型 变量名 = new 数据类型(); Scanner input = new Scanner(System.in); 每种引用数据类型都有其功能,可以...

    Java程序设计基础:定义方法-无返回值的方法定义.pptx

    类型 变量名 或 以逗号分隔多个 或可以省略 方法体: 实现功能的代码段如果有返回值,需要return 表达式;如果无返回值 ,可省略return语句; 方法命名习惯 sqrt(),random() equals(),charAt(),indexOf() 方法名...

    类的使用,学习,小结 java定义一个学生类

    [public /protected /private /static /final] 数据类型 变量名称; [public /protected /private /static /final /abstract] 返回值类型 方法名字(参数){ //如果返回值类型不是void,必须有return语句 } }

    Java开发技术大全(500个源代码).

    staticVar.java 定义静态变量 supplyTest.java 对象作为静态成员使用示例 trySwap.java 试图交换两个形参的值 useOnlyTest.java 创建多个对象,演示this的作用 useStaticBolck.java 使用静态块 useStVar.java ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    类是一个蓝图或样板,定义了某种类型的所有对象的变量和方法。 在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中...

    java核心知识点整理

    3.Java是典型的强类型语言,即必须声明变量的类型,Java中有8种类型,6种数值类型(4个整数型和2个浮点型)、一个字符类型和一个boolean类型。 想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六...

    Java课件以及代码

     包含javac编译器的路径变量设置不正确。  HelloWorldApp.java:3: Method printl (java.lang.String) not found in class java.io.PrintStream. System.out.printl (“Hello World!”); ^  方法名printl不...

    华为java培训讲义

    配置java环境变量: JAVA_HOME:配置JDK的目录 CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码) PATH:指定可执行程序的位置 LINUX系统(在" .bash_profile "下的环境变量设置) JAVA_HOME=/opt...

    Java入门教程(微学苑)-part1

    2.1 Java数据类型以及变量的定义 24 2.2 对布尔型的说明 25 2.3 Java数据类型转换 26 2.4 自动数据类型转换 26 2.5 强制数据类型转换 26 2.6 Java运算符 27 2.6.1.1 数学运算符 27 2.6.1.2 关系运算符 27 2.6.1.3 位...

    java试卷(含答案)

    大学java期末考试试卷(含答案) 一 判断题 (共10分) ...2.以下的变量定义语句中,合法的是( )。A) float $_*5= 3.4F; B) byte b1= 15678; C) double a =Double. MAX_VALUE; D) int _abc_ = 3721L;

    JAVA语言程序设计【高清版】.pdf

    18 第3章 标识符和基本数据类型 19 3.1 Java的基本语法单位 19 3.1.1 空白、注释及语句 19 3.1.2 关键字 21 3.1.3 标识符 21 3.2 Java编码体例 22 3.3 Java的基本数据类型 23 3.3.1 变量和常量 23 ...

    java 编程基础题

    其中People类具有name、age两个保护成员变量,分别为String类型和整型,且具有共有的getAge()成员方法,用于返回age变量的值,并编写一个两个参数的构造函数。Employee类具有保护成员String变量employeeNo,Teacher类...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JAVA--达内培训笔记

    java中没有sizeof这个关键字了,java中的boolean类型的值只能用true和false,且这两个也是关键字 enum 枚举 assert 断言 一个标识符尽量符合语义信息,提高程序可读性 类 名 :每个单词首字母大写, 变量和...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    跟我学JAVA-day11-类和对象.pdf

    day11-类和对象 1. 类和对象 1.1 类和对象的理解【理解】 客观存在的事物皆为对象 ,所以我们也...变量1的数据类型 变量1; 变量2的数据类型 变量2; … // 成员方法 方法1; 方法2; } /* 手机类: 类名:

    Java基础 接口.pdf

    Java编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 Java接口主要有以下特点 1、接口中的所有方法都是抽象的,不能有具体实现。 2...

Global site tag (gtag.js) - Google Analytics