当前位置: 首页 > news >正文

凯里网站建设go007久久建筑网账号

凯里网站建设go007,久久建筑网账号,临海响应式网站设计,网页生成助手目录 1.自动垃圾回收介绍1.C/C的内存管理2.Java的内存管理3.垃圾回收的对比 2.方法区的回收方法区的回收 – 手动触发回收 3.堆回收1.引用计数法2.可达性分析算法 1.自动垃圾回收介绍 1.C/C的内存管理 ⚫ 在C/C这类没有自动垃圾回收机制的语言中,一个对象如果不再…

目录

  • 1.自动垃圾回收介绍
    • 1.C/C++的内存管理
    • 2.Java的内存管理
    • 3.垃圾回收的对比
  • 2.方法区的回收
    • 方法区的回收 – 手动触发回收
  • 3.堆回收
    • 1.引用计数法
    • 2.可达性分析算法

在这里插入图片描述

1.自动垃圾回收介绍

1.C/C++的内存管理

⚫ 在C/C++这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收,而需要程序员编写代码进行回收的方式为手动回收。
⚫ 内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。在这里插入图片描述

2.Java的内存管理

⚫ Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。其他很多现代语言比如C#、Python、Go都拥有自己的垃圾回收器。在这里插入图片描述

3.垃圾回收的对比


自动垃圾回收
自动根据对象是否使用由虚拟机来回收对象
• 优点:降低程序员实现难度、降低对象回收bug的可能性
• 缺点:程序员无法控制内存回收的及时性


手动垃圾回收
由程序员编程实现对象的删除
• 优点:回收及时性高,由程序员把控回收的时机
• 缺点:编写不当容易出现悬空指针、重复释放、内存泄漏等问题


2.方法区的回收

在这里插入图片描述
⚫ 线程不共享的部分,都是伴随着线程的创建而创建,线程的销毁而销毁。而方法的栈帧在执行完方法之后就会自动弹出栈并释放掉对应的内存。


在这里插入图片描述


⚫ 方法区中能回收的内容主要就是不再使用的类。
判定一个类可以被卸载。需要同时满足下面三个条件:
1、此类所有实例对象都已经被回收,在堆中不存在任何该类的实例对象以及子类对象。
在这里插入图片描述

2、加载该类的类加载器已经被回收。
在这里插入图片描述

3、该类对应的 java.lang.Class 对象没有在任何地方被引用在这里插入图片描述

方法区的回收 – 手动触发回收

⚫ 如果需要手动触发垃圾回收,可以调用System.gc()方法。
⚫ 语法: System.gc()
⚫ 注意事项:
调用System.gc()方法并不一定会立即回收垃圾,仅仅是向Java虚拟机发送一个垃圾回收的请求,具体是否需要执行垃圾回收Java虚拟机会自行判断


⚫ 方法区中能回收的内容主要就是不再使用的类。
判定一个类可以被卸载。需要同时满足下面三个条件:
1、此类所有实例对象都已经被回收,在堆中不存在任何该类的实例对象以及子类对象。
2、加载该类的类加载器已经被回收。
3、该类对应的 java.lang.Class 对象没有在任何地方被引用。

3.堆回收

如何判断堆上的对象可以回收?
Java中的对象是否能被回收,是根据对象是否被引用来决定的。如果对象被引用了,说明该对象还在使用,不允许被回收在这里插入图片描述
循环引用
在这里插入图片描述

如何判断堆上的对象没有被引用?
常见的有两种判断方法:引用计数法和可达性分析法。

1.引用计数法

  • 引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1,取消引用时减1

引用计数法的优点是实现简单,C++中的智能指针就采用了引用计数法,但是它也存在缺点,主要有两点:

  • 1.每次引用和取消引用都需要维护计数器,对系统性能会有一定的影响
  • 2.存在循环引用问题,所谓循环引用就是当A引用B,B同时引用A时会出现对象无法回收的问题。在这里插入图片描述

查看垃圾回收日志
⚫ 如果想要查看垃圾回收的信息,可以使用-verbose:gc参数。
⚫ 语法: -verbose:gc
在这里插入图片描述

2.可达性分析算法

  • Java使用的是可达性分析算法来判断对象是否可以被回收。可达性分析将对象分为两类:垃圾回收的根对象(GC Root)和普通对象,对象与对象之间存在引用关系。
  • 下图中A到B再到C和D,形成了一个引用链,可达性分析算法指的是如果从某个到GC Root对象是可达的,对象就不可被回收。

在这里插入图片描述
哪些对象被称之为GC Root对象呢?
⚫ 线程Thread对象。
在这里插入图片描述
⚫ 系统类加载器加载的java.lang.Class对象。
在这里插入图片描述
⚫ 监视器对象,用来保存同步锁synchronized关键字持有的对象。
在这里插入图片描述
⚫ 本地方法调用时使用的全局对象。

http://www.yayakq.cn/news/709750/

相关文章:

  • 起名网站开发大型网站开发的书
  • 做网站用不用云服务器wordpress 网站特效
  • c 网站开发 视频南昌高端模板建站
  • 网站如何免费推广产品设计公司招聘
  • 微信公众号个人可以做网站么电商运营培训机构哪家好
  • 如何用社交网站开发客户百姓网地址怎么创建
  • 淘宝上的网站建设企业邮箱怎么认证
  • 个人签名设计网站网站营销推广怎么做网络营销推广
  • 手机数码网站企业网站的内容营销
  • 网站建设的所有权怎么做会员卡管理系统
  • 哪家招聘网站的猎头做的比较好营口网站建设开发制作
  • 台州知名网站文章网站是怎么做的
  • 网站设计ps做效果图过程工装公司排名前十
  • 网站视图错位中宁网站建设
  • 微信做商城网站中国建行网站首页
  • 网站建设的思想网站搜索怎么做的
  • 有没有免费的网站软件营销服务公司
  • 汕头网站建设过程阿里云免备案服务器
  • 如何设计响应式布局网站濮阳市做网站公司
  • 网站后台网址忘记了 php线上ui设计培训哪个好
  • 可以做图片视频的网站e福州app官方网站
  • 有服务器域名源码怎么做网站平台网页设计与制作字体设置
  • 做301重定向会影响网站权重吗东莞建设银行营业时间
  • 莱芜营销型网站制作优化关键词排名
  • 织梦教育培训网站源码wordpress主题吧
  • 高端网站开发设计简介wordpress怎么换语言
  • 手机自适应网站住房和城乡建设部网站北京
  • 湖南网站开发 d岚鸿wordpress售后退货插件
  • 网站建设中 即将上线html5源代码什么网站做ppt
  • 什么行业最需要做网站建设新闻发布最新新闻