07_内存管理资料.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
07_内存管理资料

内存管理 ID:WPJ-Java Program Basic 课程目标 代码块 程序运行 内存划分 全局变量与成员变量 静态变量与实例变量 参数传递:值传递引用传递 代码块 静态代码块:随着类的加载而执行,用于给类进行初始化。只执行一次。 构造代码块:可以给所有对象进行初始化的。 同步代码块:synchronized () {} (出现在线程中) 构造函数代码块:构造函数 普通方法代码块:普通方法 优先级问题 静态代码块:随着类的加载而执行,优先级最高 构造块:当调用构造函数时,在构造函数之前调用构造块 同步代码块:次之 构造函数:次之 普通方法:最后(调用才执行) 代码执行顺序 第1行 public class Test { 第2行 private String name = wepull; 第3行 private int age = 2; 第4行 public Test(){ 第5行 age = 1000;// 第6行 } 第7行 public static void main(String[] args) { 第8行 Test t = new Test(); 第9行 System.out.println(t.name+的年龄是+t.age+年); 第10行 } 第11行 } 代码执行顺序 先运行到第 7 行,这是程序的入口 然后运行到第 8 行,这里要 new 一个 Test,就要调用 Test 的构造方法 就运行到第 4 行,注意:可能觉得接下来就应该运行第 5 行了,初始化一个类,必须先初始化它的属性 因此运行到第 2 行,然后是第 3 行 属性初始化完过后,才回到构造方法,执行里面的代码,也就是第 5 行 然后是第 6 行,表示 new 一个 Test 实例完成 然后回到 main 方法中执行第 9 行 然后是第 10 行 Java内存管理 我们使用的变量就是计算机中一块块内存空间。那么Java 是如何创使用和收集这些内存空间?同时,了解程序在运行时对内存的分配、使用和收集,对优化程序结构、合理化程序设计有很大的好处。 另外,了解Java 语言对内存的管理,也有利于我们了解Java 语言的一些特性与机制。良好的、健壮的代码不但要能够实现要求的功能,还要求合理利用内存,优化执行效率。 内存管理原则 在java中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统间交互!这就保证了java程序的平台无关性!下面我们从程序运行前,程序运行中、程序运行内存溢出三个阶段来说一下内存管理原理。 程序运行前 有些编程语言编写的程序会直接向操作系统请求内存,但Java 并不支持那么做。这样做的一个重要优点是保证了程序的平台无关性。既然Java 程序不负责创建内存空间,那由谁创建呢?当然是由JVM完成。当程序准备执行时,由JVM 向操作系统请求一定的内存空间,称为初始内存空间.程序执行过程中所需的内存都由Java虚拟机从这片内存空间中划分 程序运行中 Java程序一直向Java虚拟机申请内存,当程序所需内存空间超出初始内存空间时,Java虚拟机会再次向操作系统申请更多的内存供程序使用。 内存溢出 程序接着运行,当Java 虚拟机已申请的内存达到了规定的最大内存空间,但程序还需要更多的内存,这时会出现内存溢出的错误。 综述 可以看出,Java程序所使用的内存是由Java虚拟机进行管理、分配的。Java虚拟机规定了Java程序的初始内存空间和最大内存空间,开发者只需要关心Java虚拟机是如何管理内存空间的,而不用关心某一种操作系统是如何管理内存的。 程序代码执行过程 逻辑内存划分 栈内存:(stack)可以保存对象的名称(保存访问堆内存的地址) 堆内存:(heap)保存每个对象的具体属性 数据区:(data segment)静态变量,字符串常量 代码区:(code segment)存放类结构,存放代码 成员变量与局部变量 成员变量 成员变量指的是类范围里定义的变量,也就是前面所说的属性;局部变量指的是一个方法内定义的变量。 初始化和内存中的运行机制: 当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。 局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化,这意味着定义局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋初始值时,系统才会局部变量分配内存,并将初始化值保存到这块内存中。 成员变量 区别: 成员变量可以有访问控制符,局部变量不能有访问控制符 与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中的。如果局部变量 是基本类型的变量,则直接把这个变量的值保存在

文档评论(0)

10577 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档