星期二, 十二月 08, 2015 21:20:12
对象内存管理
一、对象内存管理
1.编译好的java程序需要运行在jvm中。
2.程序,无论代码还是数据,都需要存储在内存中。
jvm为java程序提供并管理所需要的内存空间。
3.jvm内存分为“堆”、“栈”、“方法区”三个区域,分别用于存储不同的数据。
二、堆内存
1.对象存储在堆中
1.1 jvm在其内存空间开辟一个称为“堆”的存储空间;
1.2这部分空间用于存储使用new关键字所创建的对象。
2.成员变量的生命周期
2.1 访问对象需要依靠引用变量
2.2当一个对象没有任何引用时,被视为废弃的对象,属于被回收的范围。
该对象中的所有成员变量也随之被收回。
2.3成员变量的生命周期为:
从对象在堆中创建开始到对象从堆中被收回结束。
Cell c = new Cell();
c = null;//不再指向刚分配的对象空间,成员变量失效。
3.垃圾回收机制
3.1垃圾回收器GC,是jvm自带一个线程(自动运行着的程序),用于回收没有任何指向的对象。
3.2java程序员不用担心内存管理,因为垃圾收集器会自动进行回收管理。
4.java程序中的内存泄露问题
4.1内存泄露是指: 不再使用的内存没有被及时回收。严重的内存泄露会因过多的内存占用而导致程序的崩溃。
4.2GC线程判断对象是否可以回收的依据是否有引用指向,因此,当确定该对象不再使用时,
应该及时将其引用设置为null。
5.System.gc()方法
5.1 GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象,就立刻回收。
5.2 一般情况下,当我们需要GC线程即刻回收无用对象时,可以调用System.gc()方法。
5.3System.gc()用于建议虚拟机马上调度GC线程回收资源,具体的实现策略取决于不同的JVM系统。
三、栈
1.栈用于存放方法中的局部变量
1.1 JVM在其内存空间开辟一个称为"栈"的存储空间;
1.2这部分空间用于存储程序运行时在方法中声明的所有局部变量。
例如:main()方法中有以下代码:
Cell c = new Cell();
int num = 5;
栈内存: 5,40DF 堆内存:被40DF指向的对象
2.局部变量的生命周期
2.1一个运行的java程序从开始到结束会有多次方法的调用,
jvm会为每一个方法的调用在栈中分配一个对应的空间,这个空间被称为该方法的栈帧。
2.2一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据。
当某一个方法调用完成后,其对应的栈帧将被清除,局部变量失效。
3成员变量和局部变量
3.1差别:
3.1.1 局部变量
定义在方法中; 没有默认值,必须自行设定初始值;方法调用时,存在栈中,方法调用结束,从栈中清除。
3.1.2成员变量
定义在类中,方法外;有默认初始值,可以不显示初始化;所在类被实例化后,存在堆中,对象被回收时,成员变量失效。
四、方法区
1. 方法区用于存放类的信息
1.1方法区用于存放类的信息,java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区。
类的各种信息(包含方法)都在方法区存储。
1.2.Cell c = new Cell();Cell类首先被装载到jvm的方法区,其中包括类的基本信息和方法定义等。
2.方法只有一份
2.1当类的信息被加载到方法区时,除了类的类型信息以外,同时类内的方法定义也被加载到方法区;
2.2类在实例化对象时,多个对象会拥有各自在堆中的空间,但所有实例化对象时共用在方法区中的一份方法定义的。
星期二, 十二月 08, 2015 21:56:31
相关推荐
Java是一种广泛使用的面向对象的编程语言,...总的来说,这个"day02_Java基础语法"的学习资料将引导你逐步掌握Java编程的基础,从简单的变量声明到复杂的面向对象设计,这些都是成为一个合格的Java开发者所必备的知识。
2. **类与对象**:Java是一种面向对象的语言,书中会讲解类的概念,如何创建和实例化对象,以及封装、继承和多态这三大面向对象特性。 3. **数组**:介绍如何声明和操作单维和多维数组,以及数组在内存中的存储方式...
- 内存管理:Java自动进行内存管理,包括垃圾回收机制(GC),程序员无需手动释放内存。 - 代码安全性:Java平台实现了代码安全,对外没有直接的指针操作,降低了安全隐患。 3. **核心概念**: - JDK(Java ...
5.2 lazy loading:延迟加载策略,只在真正需要时加载关联对象,避免内存消耗过大。 5.3 分页查询:使用Criteria的setFirstResult()和setMaxResults()进行分页,提高查询效率。 5.4 异步处理:在大数据量操作时,...
总结来说,Java中的内存管理分为栈内存和堆内存。栈内存主要存放基本类型变量和对象引用,而堆内存存放实际的对象实例。形参和局部变量在方法执行期间存在,方法执行结束后,这些变量就会被销毁。对象引用可以指向堆...
在CoreJava_day17的学习笔记中,我们关注的重点是这个模式的应用及其相关概念。 观察者模式的核心在于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表可被观察的对象,即被观察的目标,而...
Java具有垃圾回收机制,自动管理内存,这减轻了程序员的工作负担,同时提高了程序的稳定性。 在Java_day12的课程中,可能涉及以下核心知识点: 1. **类与对象**:这是Java的基础,讲解如何定义类(class)并创建...
【Java_day11上课资料.zip】是一个包含了Java编程学习资源的压缩文件,主要针对的是Java初学者或进阶者。这个资料包可能是某一天课程的教学材料,可能包括课件、代码示例、练习题和解决方案等。从标题来看,我们可以...
7. **JVM和内存管理**:了解Java虚拟机(JVM)的工作原理和内存模型,包括堆内存、栈内存、方法区以及垃圾回收机制,有助于优化代码性能。 8. **泛型**:泛型提供了一种方式来限制方法和容器的类型,从而提高代码的...
11. **垃圾回收**:Java的自动内存管理主要依赖于垃圾回收机制,理解其工作原理和调优策略对提升应用性能至关重要。 12. **注解(Annotation)**:注解是元数据的一种形式,可以提供编译时或运行时的附加信息。Java...
7. **JVM内存模型**:Java虚拟机(JVM)的内存管理包括堆、栈、方法区等区域。学生会学习各个区域的作用,以及如何优化内存使用,减少内存泄漏。 8. **Junit测试**:JUnit是Java中最常用的单元测试框架,用于编写和...
9. **垃圾回收**:Java的自动垃圾回收机制负责管理内存,当对象不再被引用时自动释放。理解其工作原理有助于避免内存溢出问题。 10. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方式向...
根据提供的文件信息,我们可以深入探讨Java中集合框架的相关知识点,特别是集合的概念、与数组的区别、集合的分类...开发者可以根据应用程序的具体需求选择合适的集合类型,并利用它们提供的功能轻松地管理对象集合。
【Java_day06上课资料.zip】是一份针对Java学习者的教育资源,主要涵盖了Java编程语言的第六天课程内容。从文件名来看,我们可以推测这可能是某个系列教程的一部分,旨在帮助学员逐步掌握Java的基础知识和进阶技能。...
### Java Day02 笔记知识点总结 #### 02.09 Java语言基础(变量的概述及格式) - **A: 什么是变量** - 变量是在程序执行过程中,其值可以在某个范围内发生变化的量。 - **B: 变量的定义格式** - 变量的定义遵循...
12. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理和垃圾收集,有助于优化程序性能。 13. **Java标准库**:熟悉Java标准库中的各种类和方法,如Math类、Collections类、日期时间API等,可以极大...
在CoreJava_day05的学习笔记中,我们主要探讨了数组、二维数组以及生成随机数的三种方法。同时,还涉及到了String对象的不同状态。 首先,数组是Java中的基础数据结构,它是一个元素的集合,可以存储基本类型(如...
2. **集合框架**:Java集合框架是存储和管理对象的统一接口,包括List、Set、Queue等接口以及ArrayList、LinkedList、HashSet、HashMap等实现。这一天可能深入探讨了这些数据结构的特性和使用场景。 3. **异常处理*...