05内存管理_旺旺老师JavaSE

上传人:豆浆 文档编号:36798182 上传时间:2018-04-02 格式:PDF 页数:22 大小:4.26MB
返回 下载 相关 举报
05内存管理_旺旺老师JavaSE_第1页
第1页 / 共22页
05内存管理_旺旺老师JavaSE_第2页
第2页 / 共22页
05内存管理_旺旺老师JavaSE_第3页
第3页 / 共22页
05内存管理_旺旺老师JavaSE_第4页
第4页 / 共22页
05内存管理_旺旺老师JavaSE_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《05内存管理_旺旺老师JavaSE》由会员分享,可在线阅读,更多相关《05内存管理_旺旺老师JavaSE(22页珍藏版)》请在金锄头文库上搜索。

1、主题: 刘红旺 JAVASE 教程 类和对象 旺旺老师旺旺老师软件工程师实训软件工程师实训课程课程 Java 内存管理 旺旺老师简介旺旺老师简介 刘红旺,82 年生于山西,02 年来西安求学,一年后辍学从事软件开发工作,三年后投 身软件教育至今。至 09 年 12 月,旺旺拥有七年工作经验,四年软件教育经验。旺旺兴 趣广泛,近期一直学习经济学与心理学。旺旺老师课程特点:通俗易懂,风趣幽默。 旺旺老师旺旺老师 版权所有版权所有 http:/ 主题: 刘红旺 JAVASE 教程 类和对象 标图书说明 旺旺一直有逛书店的习惯,到 java 柜台总会停下来看看有什么基础书籍向学生推荐,但可惜十分满意的

2、基本没有。于是有了下面的话: 现在市面上的 java 教材有两种: 一种是学院派老师编写的,他们是主流,你看到十本 java 书,有 九本半是这样的。他们的作者拥有让人敬仰的称谓,如某某教授,某某专家;他们写的书大都是大部头,动辄上千上万;他们文风严谨,遣词专业;他们案例深奥,让人深思。总之,我很敬仰他们,因为我当初也是读着这样的书学 java 的。但现在看来,这样的书并不适合入门,情 节大都是这样的,当我们怀着莫大的热情准备开始学习 java,买了一本久仰的java 编程宝典(有无此书,无从得之,是旺旺杜撰的书名),它很厚很重很专业,你用毅力恒心支持看了几十页,才相信, java 的确是难学

3、,后来,就不怎么看它了。直到过了很多天,也许你已从事 java 方面的开发工作,一天,从书堆里无意的见到它,拍拍灰尘看看,够厚,就作为工具书备用吧。 还有一种是像旺旺这样草根阶层(好听点叫实战派)编写的,这样的书凤毛麟角,因为大家都在忙于工作,不像旺旺这样打了鸡血精力充沛的无法发泄。他们的称谓一般都不匝地,不谈也罢;他们的书也不怎么厚,能上千页的更少之又少;他们文风朴实,贴近大众;他们案例生 动,通俗易懂,风趣幽默;你可以当技术类书籍来学习它,甚至当消遣类散文来阅读它。OK,如果你初学 java,需要的就是一本这样的书,所以旺旺老师旺旺老师 JavaSEJavaSE 教程的目标人群是:初教程的

4、目标人群是:初学学 javajava 的读者的读者。 还有如果您已认真完善的学习过 java,或已从事 java 方面的开发工作,那也可以看看本书的部分章节,旺旺一些幽默风趣的案例也许能给您带来一些惊喜,一些实用技术的深入讲解能给您带来些许收获。 所以旺旺老师 JavaSE 教程的理想目标是:理想目标是: 让新手当技术类书让新手当技术类书籍来学习它,让老手当消遣类散文来阅读它籍来学习它,让老手当消遣类散文来阅读它。想让所有人,在快乐中学习,在快乐中成长,在快乐中工作。学习 java 可以是件很轻松的事 情,让所谓高深的技术平民化,让所谓复杂的技术简单化,这是我的奋斗目标,也会一直为此努力。 城

5、市城市:陕西,西安陕西,西安 QQ: 22713528 技术交流群技术交流群:17951956 电子邮件电子邮件: 个人网站个人网站: http:/ 简单简单 IT 学习网,学习学习网,学习 IT 变简单变简单 配套视频下载地址:配套视频下载地址: http:/ 60477/ 欢迎下载学习欢迎下载学习 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 3 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 第五章:Java 内存管理 本章主要讲解 Java 程序的内存分配,Java 值类型与引用类型,值传递引用传递知识。下图为本章知识点导图: 5.

6、15.1 JAVAJAVA 内存管理内存管理 我们使用的变量就是计算机中一块块内存空间。那么 Java 是如何创使用和收集这些内存空间?这章我们重点讲解。同时,了解程序在运行时对内存的分配、使用和收集,对优化程序结构、合理化程序设计有很大的好处。另外,了解 Java 语言对内存的管理,也有利于我们了解 Java 语言的一些特性与机制。良好的、健壮的代码不但要能够实现要求的功能,还要求合理利用内存,优化执行效率。 5.1.15.1.1 内存管理内存管理原理原理 这里我们重点掌握 Java 程序、Java 虚拟机与操作系统之间使用分配内存的相互关系。我们从程序运行前,程序运行开始,与程序运行内存溢

7、出三个阶段讲解。 程序运行前:有些编程语言编写的程序会直接向操作系统请求内存,但 Java 并不支持那么做。这样做的一个重要优点是保证了程序的平台无关性。既然 Java 程序不负责创建内存空间,那由谁创建呢?聪明的读者可能已经想到,是由 JVM 完成。当程序准备执行时,由JVM 向操作系统请求一定的内存空间,称为初始内存空间。程序执行过程中所需的内存都由Java 虚拟机从这片内存空间中划分。 如下图: 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 4 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 程序运行中:Java 程序一直向 Java

8、 虚拟机申请内存,当程序所需内存空间超出初始内存空间时,Java 虚拟机会再次向操作系统申请更多的内存供程序使用。 内存溢出:程序接着运行,当 Java 虚拟机已申请的内存达到了规定的最大内存空间,但程序还需要更多的内存,这时会出现内存溢出的错误。 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 5 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 至此可以看出,Java 程序所使用的内存是由 Java 虚拟机进行管理、分配的。Java 虚拟机规定了 Java 程序的初始内存空间和最大内存空间,开发者只需要关心 Java 虚拟机是如何管理内存空

9、间的,而不用关心某一种操作系统是如何管理内存的。 5.1.25.1.2 RUNTIMERUNTIME 类的使用类的使用 Java 给我们提供了 Runtime 类得到 JVM 内存的信息。 方法名称 参数 作用 返回值 getRuntime 无 获取 Runtime 对象 Runtime 对象 totalMemory 无 获取 JVM 分配给程序的内存数量 long:内存数量 freeMemory 无 获取当前可用的内存数量 long:内存数量 maxMemory 无 获取 JVM 可以申请到的最大内存数量 long:内存数量 5.1.35.1.3 内存空间逻辑划分:方法区,堆与栈内存空间逻辑

10、划分:方法区,堆与栈 JVM 会把申请的内存从逻辑上划分为三个区域,即:方法区、堆与栈。 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 6 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 接下来介绍 Java 虚拟机对内存空间的管理,Java 程序中的哪些内容会占用内存空间呢?面向对象编程中接触最多的类的结构、对象中的数据、变量(包括基本类型和引用类型)等都会占用内存空间,如下图所示: 为方便管理,Java虚拟机对应的在内存中划分了三个区域“方法区”、“堆区”和“栈区”,分别保存类结构、对象中的数据和变量(基本型和引用型)。 这三个内存区域

11、都有大小限制,任何一个区域内存溢出都会导致程序出现错误,栈内存溢出会发生StackOverflowException错误,堆内存溢出会发生OutOfMemoryError错误。 图5 Java虚拟机在内存中划分了三个区域 方法区中的内存分配:方法区默认最大容量为64M,Java虚拟机会将加载的java类存入方法区,保存类的结构(属性与方法),类静态成员等内容。编写中小型程序时,一般不会造成方法区的内存溢出。类结构在方法区中的存放形式如下图所示: 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 7 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有

12、 堆中的内存分配:堆默认最大容量为64M,堆存放对象持有的数据,同时保持对原类的引用。可以简单的理解为对象属性的值保存在堆中,对象调用的方法保存在方法区。下面的代码实例化两个Student类的对象: package com.wangwang; public class Demo public static void main(String args) int i = 10; Student stu1 = new Student(); stu1.name = “Tom“; stu1.age = 18; Student stu2 = new Student(); stu2.name = “Jerr

13、y“; stu2.age = 22; 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 8 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 栈中的内存分配:栈默认最大容量为1M,在程序运行时,每当遇到方法调用时,Java虚拟机就会在栈中划分一块内存称为栈帧(Stack frame),栈帧中的内存供局部变量(包括基本类型与引用类型)使用,当方法调用结束后,Java虚拟机会收回此栈帧占用的内存。 如下例所示: 图8 栈、堆、方法区之间的关系 5.25.2 JAVAJAVA 数据类型数据类型 有很多同学学过 C 语言,知道 C 语言可以声明指针类型的

14、变量。那就会问,java 中有没有指针呢?您一定要明确回答:“JAVAJAVA 中没有指针中没有指针”。问题并没有到此终结,您要紧接着说“但但 JAVAJAVA 底层封装了指针底层封装了指针”。对,Java 底层封装了指针,但我们要说 java 中没有指针,也就是不能创建指针类型的变量不能创建指针类型的变量。 主题:旺旺老师软件工程师实训教程-JAVASE 第五章:JAVA 内存管理 页面 9 / 22 WWW.EASYITEDU.COM 旺旺老师,版权所有 但也并不是所有的类型都封装了指针,根据这点不同,java 的数据类型分为两类,即:值类型(基本数据类型)和引用类型。 值类型:又称基本数

15、据类型和基元数据类型。 没封装指针的变量,它们在 java 中只有 8 个,其中大部分我们前几章已经学些过,包括 int, short, float, lang, double, char, boolean, byte。这里大家发现它们首字母小写,所以它们并不是类,也没有属性和方法。声明值类型变量,只会在栈栈中分配一块内存空间。 引用类型:就是底层封装指针的数据类型。 这部分包含的比较多,包括或自定义或系统提供的所有类;后面学习的所有抽象类,接口;以及前面学习使用的所有数组。他们在内存中分配两块空间,第一块内存分配在栈中,只存放别的内存地址,不存放具体数值,我们也把它叫指针类型的变量,第二块内存分配在堆中,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号