zoukankan      html  css  js  c++  java
  • java的内存管理 对象的分配与释放

    分配

    程序员通过new为每个对象申请内存空间(基本类型除外),所有对象都在堆中分配空间;释放:对象的释放是由垃圾回收机制决定和执行的。

    Java内存分为两种:栈内存和堆内存

    (1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在栈内存中分配;

    (2)堆内存用来存储由new创建的对象和数组以及对象的实例变量(即全局变量)

    (3)堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是运行时动态分配内存的;缺点是运行时动态分配内存,存取速度慢;

    (4)栈的优点是存取速度较快仅仅次于CPU中的寄存器,且栈数据可以共享;但是栈中的数据大小和生存期是必须确定的,缺乏灵活性;

    (5)只有一个堆区被所有线程共享,堆区不存放基本类型和对象引用只存放对象本身

    (6)每个线程包含一个栈区,保存基础数据类型的对象和自定义对象的引用,每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问

    还有一个方法区:存储所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量等信息,又叫静态区,是所有线程共享的。

    Java对象销毁

    Java中垃圾收集器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象作为垃圾进行回收,释放垃圾对象所占的内存空间。

    对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就立即会被回收,仅当垃圾收集器空闲或内存不足时,才会回收他们。

    Java中每个对象都拥有一个finalize()方法:

    垃圾回收器在回收对象时自动调用对象的finalize()方法来释放系统资源。

    参考:https://www.cnblogs.com/liufangdekele/p/6118979.html

    参考:http://www.jb51.net/article/64258.htm

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/leifei/p/8258793.html
Copyright © 2011-2022 走看看