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

JAVA内存泄漏问题

  Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或 JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。

  Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或 JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。

  在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

  在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此不需要考虑这部分的内存泄露。

  注意事项:

  1.最基本的建议是尽早释放无用对象的引用。如:

  ...

  A a = new A();

  //应用a对象

  a = null; //当使用对象a之后主动将其设置为空

  ….

  注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除

  2.尽量少用finalize函数。它会加大GC的工作量。

  3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中

  4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。

  5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费

  6.尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间

  7.尽量避免显式申请数组空间

  8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。

  9.尽量在合适的场景下使用对象池技术以提高系统性能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux tcpip命令,TCP IP协议Linux系统下地址查询命令
  • 揭秘网络规则——是什么限制了你的网速
  • linux权限641,linux之权限管理_1
  • 电脑维修指导手册(联想)
  • kali linux 虚拟机iso 下载,Kali Linux 2016.2发布提供虚拟机以及系统镜像下载
  • linux宝塔打开目录慢,Linux系统宝塔面板系统盘爆满解决方案 _ 厦门SEO
  • 微软发布SQL Server 2008测试版 明年上市
  • mysql linux udf提权,mysql udf提权原理和提权案例分析 udf提权木马下载
  • 与西安协同销售总监赵建春先生避风塘聊天记
  • Linux网络虚拟化之macvlan,linux 网络虚拟化: macvlan
  • OpenSER安装配置指南
  • linux下spark开发环境,Ubuntu下Spark开发环境搭建
  • linux arduino 串口,树莓派与arduino串口通信实践
  • 未定义partnerLinkType问题的解决方案
  • Linux网络设备驱动基本原理,Linux网络设备驱动基本原理和框架.pdf
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • css布局,左右固定中间自适应实现
  • DataBase in Android
  • Docker入门(二) - Dockerfile
  • E-HPC支持多队列管理和自动伸缩
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • react-native 安卓真机环境搭建
  • Shadow DOM 内部构造及如何构建独立组件
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端学习笔记之观察者模式
  • 十年未变!安全,谁之责?(下)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 写给高年级小学生看的《Bash 指南》
  • 新版博客前端前瞻
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • AI算硅基生命吗,为什么?
  • UI设计初学者应该如何入门?
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Redis 入门到精通(七)-- redis 删除策略
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (六)Hibernate的二级缓存
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)setTimeout 和 setInterval 的区别
  • .FileZilla的使用和主动模式被动模式介绍
  • .gitattributes 文件
  • .naturalWidth 和naturalHeight属性,
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Remoting常用部署结构
  • .NET 使用配置文件
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹