`

day_36Java对象内存管理

阅读更多

星期二, 十二月 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 

 

0
0
分享到:
评论

相关推荐

    day02_Java基础语法.rar

    Java是一种广泛使用的面向对象的编程语言,...总的来说,这个"day02_Java基础语法"的学习资料将引导你逐步掌握Java编程的基础,从简单的变量声明到复杂的面向对象设计,这些都是成为一个合格的Java开发者所必备的知识。

    Wiley_Java in 60 Minutes a Day_2003

    2. **类与对象**:Java是一种面向对象的语言,书中会讲解类的概念,如何创建和实例化对象,以及封装、继承和多态这三大面向对象特性。 3. **数组**:介绍如何声明和操作单维和多维数组,以及数组在内存中的存储方式...

    java\CoreJava笔记\CoreJAVA_day01

    - 内存管理:Java自动进行内存管理,包括垃圾回收机制(GC),程序员无需手动释放内存。 - 代码安全性:Java平台实现了代码安全,对外没有直接的指针操作,降低了安全隐患。 3. **核心概念**: - JDK(Java ...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4

    5.2 lazy loading:延迟加载策略,只在真正需要时加载关联对象,避免内存消耗过大。 5.3 分页查询:使用Criteria的setFirstResult()和setMaxResults()进行分页,提高查询效率。 5.4 异步处理:在大数据量操作时,...

    Java基础_内存分析

    总结来说,Java中的内存管理分为栈内存和堆内存。栈内存主要存放基本类型变量和对象引用,而堆内存存放实际的对象实例。形参和局部变量在方法执行期间存在,方法执行结束后,这些变量就会被销毁。对象引用可以指向堆...

    学习笔记 java\CoreJava笔记\CoreJava_day17

    在CoreJava_day17的学习笔记中,我们关注的重点是这个模式的应用及其相关概念。 观察者模式的核心在于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表可被观察的对象,即被观察的目标,而...

    Java_day12上课资料.zip

    Java具有垃圾回收机制,自动管理内存,这减轻了程序员的工作负担,同时提高了程序的稳定性。 在Java_day12的课程中,可能涉及以下核心知识点: 1. **类与对象**:这是Java的基础,讲解如何定义类(class)并创建...

    Java_day11上课资料.zip

    【Java_day11上课资料.zip】是一个包含了Java编程学习资源的压缩文件,主要针对的是Java初学者或进阶者。这个资料包可能是某一天课程的教学材料,可能包括课件、代码示例、练习题和解决方案等。从标题来看,我们可以...

    Java_day21上课资料.zip

    7. **JVM和内存管理**:了解Java虚拟机(JVM)的工作原理和内存模型,包括堆内存、栈内存、方法区以及垃圾回收机制,有助于优化代码性能。 8. **泛型**:泛型提供了一种方式来限制方法和容器的类型,从而提高代码的...

    Java_day15上课资料.zip

    11. **垃圾回收**:Java的自动内存管理主要依赖于垃圾回收机制,理解其工作原理和调优策略对提升应用性能至关重要。 12. **注解(Annotation)**:注解是元数据的一种形式,可以提供编译时或运行时的附加信息。Java...

    Java_day20上课资料.zip

    7. **JVM内存模型**:Java虚拟机(JVM)的内存管理包括堆、栈、方法区等区域。学生会学习各个区域的作用,以及如何优化内存使用,减少内存泄漏。 8. **Junit测试**:JUnit是Java中最常用的单元测试框架,用于编写和...

    Java_day26上课资料.zip

    9. **垃圾回收**:Java的自动垃圾回收机制负责管理内存,当对象不再被引用时自动释放。理解其工作原理有助于避免内存溢出问题。 10. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方式向...

    day12 java

    根据提供的文件信息,我们可以深入探讨Java中集合框架的相关知识点,特别是集合的概念、与数组的区别、集合的分类...开发者可以根据应用程序的具体需求选择合适的集合类型,并利用它们提供的功能轻松地管理对象集合。

    Java_day06上课资料.zip

    【Java_day06上课资料.zip】是一份针对Java学习者的教育资源,主要涵盖了Java编程语言的第六天课程内容。从文件名来看,我们可以推测这可能是某个系列教程的一部分,旨在帮助学员逐步掌握Java的基础知识和进阶技能。...

    java day02笔记

    ### Java Day02 笔记知识点总结 #### 02.09 Java语言基础(变量的概述及格式) - **A: 什么是变量** - 变量是在程序执行过程中,其值可以在某个范围内发生变化的量。 - **B: 变量的定义格式** - 变量的定义遵循...

    Java_day13上课资料.zip

    12. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理和垃圾收集,有助于优化程序性能。 13. **Java标准库**:熟悉Java标准库中的各种类和方法,如Math类、Collections类、日期时间API等,可以极大...

    学习笔记java\CoreJava笔记\CoreJava_day05

    在CoreJava_day05的学习笔记中,我们主要探讨了数组、二维数组以及生成随机数的三种方法。同时,还涉及到了String对象的不同状态。 首先,数组是Java中的基础数据结构,它是一个元素的集合,可以存储基本类型(如...

    Java_day22上课资料.zip

    2. **集合框架**:Java集合框架是存储和管理对象的统一接口,包括List、Set、Queue等接口以及ArrayList、LinkedList、HashSet、HashMap等实现。这一天可能深入探讨了这些数据结构的特性和使用场景。 3. **异常处理*...

Global site tag (gtag.js) - Google Analytics