- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)存放类结构,存放代码
成员变量与局部变量
成员变量
成员变量指的是类范围里定义的变量,也就是前面所说的属性;局部变量指的是一个方法内定义的变量。
初始化和内存中的运行机制:
当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。
局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化,这意味着定义局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋初始值时,系统才会局部变量分配内存,并将初始化值保存到这块内存中。
成员变量
区别:
成员变量可以有访问控制符,局部变量不能有访问控制符
与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中的。如果局部变量 是基本类型的变量,则直接把这个变量的值保存在
您可能关注的文档
最近下载
- 厦门东部三期垃圾焚烧发电厂项目环境影响报告书.pdf
- 2022火力发电厂化学系统智能化设计导则.docx
- MQY-202使用说明V1.2(增加CPA标志及使用说明).pdf VIP
- 国际课程课件系列之物理boardworks 5. Momentum v1.1.ppt
- 豫新船舶公司(原泥矶船厂)技术改造项目环评(新版环评)环境影响报告表.pdf
- 五年级下册综合实践活动课件-中国结——鞭炮结 全国通用 20张.pptx
- 企业风险防控清单.pdf
- 《风险管理》教案.docx
- 幼儿园保教设施设备配标准(2023版).doc
- INOVANCE汇川-中型PLC编程软件使用手册-AM400 AM600 AP700 AC700 AC800中文.pdf
文档评论(0)