美文网首页
Java01_内存管理

Java01_内存管理

作者: n_hoo | 来源:发表于2018-01-23 17:41 被阅读0次

Java的内存由JVM管理,分为堆、栈、方法区三部分。

1. 堆


1)用于存储所有new出来的对象(包括实例变量)。

2)实例变量的生命周期: 创建(new)对象时存在堆中,对象被GC回收时一并消失。

3)垃圾回收器(GC)不定时到堆中查看,看到垃圾则自动回收。 垃圾:没有任何引用所指向的对象。 回收过程是透明的,并非一看到垃圾就马上回收。 若想让它快一点回收,可以调用System.gc()。

4)内存泄露:不再使用的对象没有被及时地回收。 建议:当对象不再使用时,应及时将引用设置为null。

2. 栈(堆栈)


1)用于存储正在调用中的所有局部变量(包括参数)。

2)调用方法时在栈中为该方法分配一块对应的栈桢。 栈桢中包含所有的局部变量(包括参数)。 方法调用结束时,栈桢消失,局部变量一并消失。

3)局部变量的生命周期: 调用方法时存在栈中,方法调用结束时与栈桢一并消失。


3. 方法区


1)用于存储.class字节码文件(包括静态变量和方法)。

2)方法只有一份。通过this来区分具体是哪个对象引用的。

3)静态变量只有一份。建议通过类名.来访问。

Java内存管理:栈-堆-方法区 Java内存管理_静态变量

4. 成员变量和局部变量


成员变量分为实例变量和静态变量

1)实例变量:

1.1)属于对象的,存在堆中;

1.2)有几个对象就有几份实例变量;

1.3)必须通过对象名.来访问。

2)静态变量:

2.1)属于类的,存在方法区中;

2.2)只有一份;

2.3)建议通过类名.来访问;

2.4)何时用:所有对象的数据都一样时使用,只有一份。

成员变量:

1)类中,方法外;

2)实例变量:new时存在堆中,对象被回收时消失;

    静态变量:存在方法区中;

3)有默认值。

局部变量:

1)方法中;

2)调方法时存在栈中,方法调用结束时与栈桢一并消失;

3)没有默认值。

相关文章

  • Java01_内存管理

    Java的内存由JVM管理,分为堆、栈、方法区三部分。 1. 堆 1)用于存储所有new出来的对象(包括实例变量)...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

网友评论

      本文标题:Java01_内存管理

      本文链接:https://www.haomeiwen.com/subject/alteaxtx.html