垃圾清理势在必行——Java垃圾收集算法

EDA虚拟机分享2020版本(Synopsys2020) EDA虚拟机分享 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能,因此需要开发人员做比较深入的了解。 2.触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC: ①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。 ②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。 由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。 3.减少GC开销的措施 根据上述GC的机制,程序的运行会直接影响系统环境的变化,从而影响GC的触发。若不针对GC的特点进行设计和编码,就会出现内存驻留等一系列负面影响。为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少GC过程中的开销。具体措施包括以下几个方面: (1)不要显式调用System.gc() 此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。 (2)尽量减少临时对象的使用 临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。 (3)对象不用时最好显式置为Null 一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。 (4)尽量使用StringBuffer,而不用String来累加字符串(详见blog另一篇文章JAVA中String与StringBuffer) 由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如Str5=Str1 Str2 Str3 Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“ ”操作时都必须创建新的String对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象。 (5)能用基本类型如Int,Long,就不用Integer,Long对象 基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。 (6)尽量少用静态对象变量 静态变量属于全局变量,不会被GC回收,它们会一直占用内存。 (7)分散对象创建或删除的时间 集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片,从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC的机会。 4.gc与finalize方法 ⑴gc方法请求垃圾回收 使用System.gc()可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求Java的垃圾回收。需要注意的是,调用System.gc()也仅仅是一个请求。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。 ⑵finalize方法透视垃圾收集器的运行 在JVM垃圾收集器收集一个对象之前 ,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止化该对象释放资源,这个方法就是finalize()。它的原型为: protected void finalize() throws Throwable 在finalize()方法返回之后,对象消失,垃圾收集开始执行。原型中的throws Throwable表示它可以抛出任何类型的异常。 因此,当对象即将被销毁时,有时需要做一些善后工作。可以把这些操作写在finalize()方法里。 以下是引用片段: protected void finalize()   {   // finalization code here   } ⑶代码示例 以下是引用片段: class Garbage   {   int index;   static int count;   Garbage()   {   count ;   System.out.println("object " count " construct");   setID(count);   }   void setID(int id)   {   index=id;   }   protected void finalize() //重写finalize方法   {   System.out.println("object " index " is reclaimed");   }   public static void main(String[] args)   {   new Garbage();   new Garbage();   new Garbage();   new Garbage();   System.gc(); //请求运行垃圾收集器   }   } 5.Java 内存泄漏 由于采用了垃圾回收机制,任何不可达对象(对象不再被引用)都可以由垃圾收集线程回收。因此通常说的Java 内存泄漏其实是指无意识的、非故意的对象引用,或者无意识的对象保持。无意识的对象引用是指代码的开发人员本来已经对对象使用完毕,却因为编码的错误而意外地保存了对该对象的引用(这个引用的存在并不是编码人员的主观意愿),从而使得该对象一直无法被垃圾回收器回收掉,这种本来以为可以释放掉的却最终未能被释放的空间可以认为是被“泄漏了”。
IMSL CNL 7.0.0 (x86-64)Crack IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件 立即下载

相关推荐

基于LSTM算法的股票预测详解

一、需求 给定几个已知的股市因素(开盘、收盘、最高、最低、成交量、成交额)及各因素对应的大量数据,训练一个该股票的涨跌趋势的预测模型。并在给定的测试数据的条件下求出接下来的涨跌趋势。即得到下图中的label值。-1代表跌、1代表涨。 二、分析 1、LSTM简单介绍 LSTM这个算法是专门训练有时间序列信息的数据的,即这些数据不仅按照时间递增的顺序排布,并且前后的数据都有着很强的联系。个人认为与马尔可夫的思想差不多,即后面的值由前面的值来决定。本次需求是要根据已知的股市数据来分析某个时间段的涨跌趋势,并预测

Zhang_713的博客 1万+

java---垃圾回收算法(GC)

对垃圾回收算法,做了详细的原理介绍,特别是对于分代算法详细的介绍了他的基本的流程,以及需要注意的一些事项。

m0_58196614的博客 6584

三级等保网络拓扑图实战:从零搭建符合标准的医院安全架构

本文详细阐述了如何从零开始设计并搭建符合三级等保标准的医院网络安全架构。文章基于“一个中心,三重防护”的核心框架,深入解析了医院网络分区设计、安全域划分、关键安全设备选型与配置等实战要点,并提供了绘制专业网络拓扑图的技巧与等保测评准备指南,旨在帮助医院IT人员系统化地构建既合规又实用的纵深防御体系。

weixin_29326909的博客 504

java中的垃圾回收算法

java中有四种垃圾回收算法,分别是: 标记清除法、标记整理法、复制算法、分代收集算法

red_delia的博客 4010

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6603

PIDNet实战:如何在Cityscapes数据集上实现93.2 FPS的实时语义分割(附完整训练代码)

本文提供了在Cityscapes数据集上实现实时语义分割模型PIDNet的完整工程实践指南。PIDNet凭借其独特的比例-积分-微分三分支架构,在CVPR 2023上取得了速度与精度的出色平衡。文章详细介绍了从环境配置、数据预处理、模型训练到性能优化与部署的全流程,并分享了实现93.2 FPS高推理速度的关键技巧与代码。

weixin_29047919的博客 376

java垃圾清除算法

再讲java的垃圾回收机制之前,先要明白以下两个问题: a. 对象的循环引用 b.  怎样找到虚拟机中存活的对象 下面我们来看看这两个概念: a. 对象的循环引用:即A中的B的对象指向B的引用,而B中的A的对象指向A的引用。 代码如下: class A{ public B b; } class B{ public A a"; } class C{ public sta

CuiBQ 705

如何加载交易策略EA到MT4/MT5

1、打开MT4/MT5软件 2、首先,必须有一个EA,而且必须是mq4/ex4为扩展名。点击左上角“文件”—“打开数据文件夹”,找到安装路径 3、将EA的ex4或mq4文件放到MT4目录\MQL4\Experts里面(本文以名为Demo的EA为例) 4、如果有DLL库文件,复制到experts目录下的libraries子目录中 5、如果有tpl模板文件,复制到templates目录中 6、添加完成后重启MT4,点击允许EA运行图标 7、在导航中找到刚才安装的EA,拖拽到...

weixin_41364817的博客 7362

详解java的垃圾清理机制

本文主要讲述了java的垃圾回收机制

在地图上飞行 3501

换频道——假想《道德经》与量子力学的一些联系

之前看到一位AI PM的前辈分享了自己对于PM境界的看法: 境界一,行事被放心。 境界二,独立主导产品线从0到1,做正确的事,并把事做正确。 境界三,一切以灵魂境界为基础,产品作为其理念的衍生。 对于我,3个月尝试于目标而无获,但塞翁失马焉知非福。自己已经具备境界一,虽然境界二尚未成熟,但境界三却有幸有所思考。 今天,往澳门的动车途中有感而发,为随笔。

1023

高通开发系列 - Bootloader之lk匹配dtb和dtbo中msm-id和board-id的知识

lk匹配dtb和dtbo中的msm-id和board-id等知识

fulinux的博客 4249

垃圾清理势在必行——java垃圾收集算法

 垃圾清理势在必行——java垃圾收集算法作者:zhangxinjie    出处:论坛整理 1.垃圾收集算法的核心思想  Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。  垃圾收集算法的核心思想是:对虚拟机可用内

走向WEB开发 702

海康visionmaster开发笔记10-集成HALCON第三方算子到VM工具箱的方法

海康visionmaster开发笔记10-HALCON第三方算子到VM工具箱的方法

视觉人机器视觉的博客 4348

java清理垃圾_垃圾清理势在必行——Java垃圾收集算法

一起学习1.垃圾收集算法的核心思想Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对...

weixin_29146477的博客 166

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java每次循环完清理一次垃圾_垃圾清理势在必行——java垃圾收集算法

转贴前言:java垃圾收集具体细节在一些书上有更为详尽的解释(如:java编程思想),我偶尔看到了这篇zhangxinjie的文章,感觉涵盖的广度不错,因此转了过来.原文如下:------------------------------------------------------1.垃圾收集算法的核心思想Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。...

weixin_28366053的博客 533

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

垃圾清理势在必行—java垃圾收集算法

本文转自IT博客,文中内容不代表本站观点,仅提供参考。   1.垃圾收集算法的核心思想   Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。   垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对

hoochiang的专栏 455

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java垃圾收集算法——垃圾清理势在必行

1.垃圾收集算法的核心思想  Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。  垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对

gdufs_iiip的专栏 444

垃圾清理势在必行--Java垃圾收集算法

1.垃圾收集算法的核心思想   Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。   垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象

Truong的专栏 1004

Java中的常见JVM垃圾收集算法

介绍几种常见的垃圾收集算法,比如复制算法、标记清除算法、标记压缩算法、综合其他算法的分代算法、G1的分区算法等。

终生学习践行者 3768
上一篇: .NET Micro Framework技术大会圆满成功
下一篇: 深入探讨 Spring 与 Struts 的集成方案
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值