Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598946
  • 博文数量: 96
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 1539
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-12 23:24
文章分类

全部博文(96)

文章存档

2013年(29)

2012年(53)

2011年(14)

分类: Java

2013-06-13 20:27:13

疯狂java读书笔记

java内存管理分为两部分:内存的分配与内存的回收
    内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间。
    内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清理该对象,并回收该对象占用的内存。

jvm的垃圾回收机制由一条后台线程完成。

实例变量和类变量
    java程序的变量大体可分为成员变量和局部变量。
        其中局部变量有3类:形参、方法内的局部变量、代码块内的局部变量。
            局部变量被存储在方法的栈内存中,生存周期都在相应的方法和代码块中,随方法和代码块的结束而消亡。
        类内定义的变量被称为成员变量。没使用static修饰的称为成员变量,用到static修饰的称为静态变量或类变量。
            (static的作用就是将实例成员变为类成员。使用static修饰,这些成员就属于类本身

实例变量和类变量的属性
    在同一个jvm中,每个类只对应一个Class对象,但每个类可以创建多个java对象。
    因此同一个jvm中的一个类的类变量只需要一块内存空间;但对实例变量而言,该类没创建一次实例,就需要为该实例变量分配一块内存空间。

实例变量的初始化时机
    对实例变量而言,它属于java对象本身,每次创建java对象时都需要为实例变量分配内存空间,并执行初始化。
    从语法角度来看,程序可在三个地方对实例变量执行初始化:
       1. 定义实例变量时指定初始值
       2. 非静态初始块中对实例变量指定初始值
       3. 构造器中对实例变量指定初始值
        其中第1、2种方式比第三种方式更早执行,第1、2种方式执行的顺序与他们在源程序中的排列位置相关,在前面的先执行。
        每当程序指定构造器来创建java对象时,该构造器必然会获得执行机会。与此同时,该类所包含的非静态初始化块 和 定义实例变量指定初始值也将会获得执行机会,并且总是在构造器执行之前获得执行。
        定义实例变量时指定的初始值,初始块中为实例变量指定初始值的语句的地位是平等的,当经过编译器处理后,他们都将被提取到构造器中。也就是说,对于类定义中的语句:
    double weight = 2.3
实际上会被分成如下2次执行:
1.double weight;创建java对象时系统根据该语句为该对象分配内存
2.weight = 2.3;这条语句将会被提取到java类的构造器中执行

类变量的初始化时机
类变量属于java类本身,只有当程序初始化该java类时才会为该类的类变量分配内存空间,并执行初始化。
从程序运行角度看,每JVM对一个java类只初始化一次,因此java程序每运行一次,系统只为类变量分配一次内存空间,执行一次初始化。
从语法角度看,程序可在2个地方对类变量执行初始化:
1.定义类变量时指定初始值
2.静态初始化块中对类变量指定初始值。
两种方式的执行顺序与他们在源程序中排列顺序相同。同样,程序先为所有类变量分配内存空间,在按源代码中两种方法的排列顺序执行相应的初始化值。

关于javap工具
jdk提供了javap工具,javap主要用于帮助开发者深入了解java编译器的机制,语法如下:
    javap ···
该工具支持如下常用选项:
    -c :分解方法代码,也就是显示每个方法具体的字节码。
    -l :用于指定显示行号和局部变量列表
    -public | protected | package | private :用于指定显示哪种级别的类成员,对应java的4种访问权限
    -verbose :用于指定显示更进一步是详细信息
例子:如有一个JavapToolTest.java 的java类。
    先将JavapToolTest.java 编译成 字节码形式,JavapToolTest.class 编译语句:javac JavapToolTest.java
    然后就可以使用javap命令了 :javap -c JavapToolTest.class 就可以看到java的字节码信息


阅读(3560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~