Java 堆/栈 GC相关

一、Java程序运行时的内存分配策略

    静态分配[静态存储区]/栈分配[栈区]/堆分配[堆区]

   1)静态存储区(方法区):主要存放静态数据、全局staic数据和常量

    2)栈区:方法体内的局部变量都在栈上创建

    3)堆区:通常就是指在程序运行时直接new出来的内存


二、栈内存/堆内存的区别

           ---------从内存分配角度---------

    在方法体内定义的(局部变量)一些基本类型的变量和对象的引用变量都是再方法的栈内存中分配的

    堆内存用来存放所有由new创建的对象(包括该对象其中的所有成员变量)和数组.在堆中分配的内存,将由Java垃圾回收器来自动管理


三、Java内存回收机制

Java内存回收机制流程图


四、Java内存泄漏引起的原因

内存泄漏指那些无用对象/不在使用的对象事实占用我们的内存,或者说无用对象内存得不到即使释放.从而造成内存空间的浪费.

长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏


五、总结

            

是一个运行时的数据区,

是由垃圾回收器来负责的.

是由动态分配内存的

存取速度慢

            

存取速度快

存在栈中的大小必须和我们的生命周期是绑定的,缺乏一定灵活性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,171评论 1 32
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,223评论 0 2
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,564评论 0 6
  • 前言 不知道大家有没有这样一种感觉,程序员的数量井喷了。可能是因为互联网火了,也可能是各家培训机构为我们拉来了大量...
    活这么大就没饱过阅读 2,771评论 6 25
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,818评论 3 83