- 博客(3)
- 收藏
- 关注
原创 java常见的内存溢出及解决方法
引起内存溢出的常见原因大致有以下几种:1.内存中加载的数据量过大,一次从数据库取出过多数据导致内存溢出; 2.集合类中有对对象的引用,使用完后没有及时清空,使得 JVM 不能回收; 3.代码中存在死循环或循环产生过多重复的实体对象; 4. 启动参数的内存值设定过小导致内存不够用;常见内存溢出的解决方法:第一步,修改 JVM 启动参数,直接增加内存。第二步,检查错误日志,查看内存溢出错误前是否还有其它异常或错误。第三步,查代码,找出可能发生内存溢出的位置。 重点排查以下几点: 1.检查对数
2022-02-12 21:31:16 9924
原创 java 对象的引用与回收机制
1)强引用(Strong Reference):Object obj = new Object();只要强引用还存在,GC 永远不会回收掉被引用的对象。2)软引用(Soft Reference):描述一些还有用但非必需的对象。在系统将会发生内存溢出之前,会把这些对象列入 回收范围进行二次回收,也就是说系统将会发生内存溢出了,才会对他们进行回收。3)弱引用(Weak Reference):程度比软引用还要弱一些。这些对象只能生存到下次 GC 之前。当 GC 工作时扫描到,无论内存是否足够都会将其回收,
2022-02-12 20:53:38 919
原创 java如何判断一个对象是否死去?
简单直观的想到一个方法是:对一个对象添加引用计数器。每当有地方引用它时,计数器值加 1;当引用失效时,计 数器值减 1.而当计数器的值为 0 时这个对象就不会再被使用,判断为已死。但这种方法有些情况会不准确:比如对象 A 中有一个字段指向了对象 B,而对象 B 中 也有一个字段指向了对象 A,而事实上他们俩都不再使用,但计数器的值永远都不可能为 0,也就不会被回收,然后就发生了内存泄露。 正确的方法是:可达性分析. 所有生成的对象都是一个为"GCRoots"的根的子树。从 ...
2022-02-12 20:37:39 431
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人