java垃圾回收

news/2024/7/20 14:19:46 标签: java, 内存管理, c/c++

jvm何时回收一个java对象所占的内存?

java对象失去引用时,JVM垃圾回收机制会清除他们,回收所占内存空间。

java有没有内存泄漏?

无用的内存没有被回收就是内存泄漏。

C++内存泄漏:内存是由程序员显示回收,忘了回收会导致内存泄漏

java内存泄漏:不可达对象由jvm回收不会导致内存泄漏,可达的但程序员不使用的对象会导致内存泄漏,其实就是浪费内存,占着空间自己又不用。

数组的remove

element[--size]=null删除元素要把引用赋值为null,否则就内存泄漏

自定义stack的pop

elementData[size]=null同样的道理

jvm回收java对象内存细节

垃圾回收的任务:跟踪并监控每个java对象,当不可达,回收内存;清理内存分配的时候产生的内存碎片。

垃圾回收算法:

执行方式:

(1)串行执行和并行执行

(2)并发执行和应用程序停止

回收内存方式:(目的是回收不可达对象)

(1)复制:搜索全部A可达对象,然后直接全部复制到B,再把A回收

(2)标记清除:扫描一遍标记A那些可达的,再扫描一遍回收那些不可达的

(3)标记压缩:扫描一遍标记A那些可达的,再压缩把可达对象凑一块,然后再一起回收不可达的。

引用分类

(1)强引用:处于可达状态,不可能回收;

(2)软引用:SoftReference当系统空间不足时,有可能被回收

(3)弱引用:WeakReference生命期更短,更弱

(4)虚引用:PhantomReference不能单独使用,用于跟踪对象被垃圾回收的状态

 

隔代回收机制

young代:复制算法遍历处于可达的对象,对象少,复制成本不大。

old代:young代多次扫描后留下的移动到old代,采用标记压缩算法

permanent代:不会被回收,用于装载class类信息(个人理解就是栈空间outofMermeryError: Perm Gen space)

 

垃圾回收附加选项

-Xmx:设置jvm堆内存最大容量

-Xms:设置jvm堆内存初始容量

-XX:PermSize:设置Permanent代默认容量

-XX:MaxPermSize:设置Permanent代最大容量

 

内存管理技巧

(1)尽量使用直接量

(2)使用StringBuilder和StringBuffer进行字符串连接

(3)尽早释放无用对象的引用

(4)尽早释放静态变量

(5)避免在经常调用的方法和循环中创建java对象

(6)缓存经常使用的对象

(7)尽量不要使用finalize方法

(8)考虑使用SoftReference

 

 

 

转载于:https://www.cnblogs.com/thly1990/p/3561721.html


http://www.niftyadmin.cn/n/989011.html

相关文章

机器学习之线性回归(机器学习基石)

目录 引子 几何意义 如何最小化Ein Ein的矩阵表示 Ein梯度的表示与W的计算 Ein的另一种表现形式 H矩阵的意义 Ein的noise表现形式 学习曲线 引子 在一个二元分类的问题中我们通常得到的结果是1/0,而在分类的过程中我们会先计算一个得分函数然后在减去一个…

面试题CSS盒子模型,左右固定宽度,中间自适应的五种死法

面试题目 假设高度已知&#xff0c;请写出三栏布局&#xff0c;左右300px&#xff0c;中间自适应 有几种方法呢&#xff1f; 最容易的应该想到利用float来写&#xff0c;代码如下css样式代码&#xff0c;以下五种都是用一个样式代码 <section><article><div cla…

易燃易爆炸---python对Excel操作的面试题

已知一个Excel表格每一行代表一次单独的销售。列分别是销售产品的类型(A)、产品每磅的价格(B)、销售的磅数(C),以及这次销售的总收入。TOTAL 列设置为 Excel 公式,将每磅的成本乘以销售的磅数,并将结果取整到分。有了这个公式,如果列 B 或 C 发生变化,TOTAL 列中的单元格将自动…

Ajax点评

话题馆<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Web 2.0的快速窜升无疑是近年来IT领域的最重要趋势之一&#xff0c;而Ajax作为最重要的Web 2.0开发框架正成为开发人员追逐的焦点。为了让读者更加深入的了解Ajax在软件开发…

机器学习之梯度下降法(机器学习基石)

从二元分类到罗吉斯回归 在预测一个病人的患病情况的时候如果我们单纯的想预测下一个病人是否患病那么就会用到二元分类。但是如果我们现在预测某个病人患病的概率是多大的话显然二元分类就满足不了我们的要求于是就诞生了Logistic Regression。 Logistic Regression的假设模型…

1105: 判断友好数对(函数专题)

题目描述 输入两个正整数m和n&#xff0c;顺序输出m到n之间的所有友好数对。 如果两个整数的所有正因子之和&#xff08;包括1&#xff0c;不包括自身&#xff09;等于对方&#xff0c;就称这对数是友好的。例如&#xff1a;1184和1210是友好数对&#xff0c;因为 1184的因子…

搭建一个master对应2个slave

2019独角兽企业重金招聘Python工程师标准>>> (1)规划主从主机 主机&#xff1a;10.10.54.86 从机1&#xff1a;10.10.54.85 从机2&#xff1a;10.10.54.87(2)更改主机配置文件 [rootnan86 ~]# vim /etc/my.cnf log-binmaster-bin binlog_formatmixed server-id1 (3…

在阿里云EMR上使用Intel Analytics Zoo进行深度学习

简介 Analytics Zoo是由Intel开源,基于Apache Spark和Inte BigDL的大数据分析和AI平台&#xff0c;方便用户开发基于大数据、端到端的深度学习应用。 系统要求 JDK 8Spark 集群(推荐使用EMR支持的Spark 2.x)python-2.7(python 3.5,3.6也支持), pip安装Analytics Zoo Analytics …