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

惠州网站建设企业网站备案添加APP备案

惠州网站建设企业,网站备案添加APP备案,余姚外贸网站建设,网站开发脚本语言和数据库垃圾回收(GC)相关 在C/C中,当我们使用类似于malloc的内存开辟,还需要手动释放内存空间,这样的机制在使用时给我们造成了诸多不便,但在Java中,有垃圾回收这样的机制,这就是指:我们不再需要手动释放,程序会自动判定,某个内存空间是否可以继续使用,如果内存不使用了,就会自动释放…垃圾回收(GC)相关 在C/C中,当我们使用类似于malloc的内存开辟,还需要手动释放内存空间,这样的机制在使用时给我们造成了诸多不便,但在Java中,有垃圾回收这样的机制,这就是指:我们不再需要手动释放,程序会自动判定,某个内存空间是否可以继续使用,如果内存不使用了,就会自动释放掉. 上面讲了Java的各个区域,对于程序计数器,虚拟机栈,本地方法栈这三部分而言,其生命周期与线程有关,随线程而生,随线程而灭.并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者现车给结束时,内存就自然跟着线程回收了. 在元数据区/方法区中:一般不需要GC:一般都是类加载,而不是类卸载.  而堆是GC的主战场.更准确的是回收对象.每次回收时,释放若干对象(单位都是对象). Java堆中存放着几乎所有的对象实例,垃圾回收器在堆进行垃圾回收前,首先要判断这些对象哪些还存活,哪些已经死去,然后后续才是清理的过程,判断对象是否死有如下几种算法: 内存vs对象 在Java中,所有的对象都是要存储在内存中的(也可以说内存中存储的是一个对象),因此我们将内存回收,也可以叫死亡对象的回收. 识别出垃圾:确定这个对象后续是否会用(在Java中,使用对象,一定要通过引用的方式使用(当然,有一个例外那就是类似于new MyThread().start这样的匿名对象,这里的代码执行完,对应的对象就会当作为垃圾)).  死亡对象的判断算法 引用技术算法 引用计数描述的算法为: 给对象增加一个计数器,每当有一个地方引用它时,计数器就1;当引用失效时,计数器就-1;任何时刻的计数器为0的对象就是不能再被使用时,即对象已死. 引用计数法实现简单,判定效率也高,在大部分情况下都是一个不错的算法,比如Python语言就采用引用计数法进行内存管理. 但是引用计数算法也出现了两个关键的问题 1.消耗了额外的内存空间. 如果要给每个对象都安排一个计数器(如果计数器按照两个字节算).如果整体程序中的对象很多,总的消耗空间也多,总的消耗空间也多.尤其是每个对象中的体积比较小(假设每个对象四个字节).计数器所消耗的空间,已经达到对象空间的一半.(类似于公摊面积,十分难造).  2.循环引用 范例:观察循环引用问题 public class Test1 {public Object instance null;private static int _1MB 1024 * 1024;private byte[] bigSize new byte[2 * _1MB];public static void testGC() {Test1 test1 new Test1();Test1 test2 new Test1();test1.instance test2;test2.instance test1;test1 null;test2 null;//强制jvm进行回收System.gc();}public static void main(String[] args) {testGC();} }[GC (System.gc()) 6092K-856K(125952K), 0.0007504 secs] 从结果可以看出,GC日志包含6092K-856K(125952K),意味着虚拟机并没有因为这两个对象互相引用就不回收它们.即JVM并不使用引用计数法来判断对象是否存活. 可达性分析算法(JVM是用这个) 本质上是用时间换空间,相比于引用计数,需要消耗更多的额外时间.但总体来说,是可控的,不会产生循环引用问题. 此算法的核心思想为:在写代码时,会定义很多变量.比如,栈上的局部变量/方法中的静态类型变量/常量池中引用对象.  就以这一系列称为GC Roots的对象作为起始点,从这些节点开始向下搜索(遍历),搜索走过的路径称为引用链,当一个对象到GC Roots没有任何的引用链相连时(从GC Roots到这个对象不可达时),证明此对象是不可用的.  (所有能被访问到的对象,自然就不是垃圾了,剩下的遍历一圈,也访问不到的对象,就是垃圾). JVM中存在扫描线程,会不停尝试对代码中已有的这些变量,进行遍历,尽可能多的去访问对象. JVM自身知道有哪些对象,通过可达性的分析的遍历,把可达对象标出来,剩下的自然是不可达. 对象Object5-Object7之间虽然彼此还有关联,但是它们到Roots是不可达的,因此它们会被判定为可回收对象.  在Java语言中,可作为GC Roots的对象包含以下几种: 1.虚拟机栈(栈帧中的本地变量表)中引用的对象; 2.方法区中类静态属性引用的对象; 3.方法区中常量引用的对象; 4.本地方法栈中JNI引用的对象. 从上面可以看出引用的功能,除了最早我们使用它(引用)来查找对象,现在我们可以使用引用来判断死亡对象了.所以在jdk1.2时,Java对引用概念做了扩充,将引用分为强引用,软引用,弱引用和虚引用四种,这四种的强度依次递减. 1.强引用:强引用指的是在程序代码中普遍存在的,类似于Object obj new Object()这类的引用,只要强引用还存在,垃圾回收器永远不会回收掉被引用的对象实例. 2.软引用:软引用是用来描述一些还有用但是不是必须的对象.对于软引用关联着的对象,在系统将要发生内存溢出之前,会把这些对象列入回收范围之中进行第二次回收.如果这次回收还是没有足够的内存,才会抛出内存溢出异常.在JDK1.2之后,提供了SoftReference类来实现软引用 3.弱引用:弱引用也是用来描述非必须对象的.但是它的强度要弱于软引用.被弱引用关联的对象只能生存到下一次垃圾回收发生之前.当垃圾回收器开始进行工作时,无论当前内容是否够用,都会回收掉只被弱引用关联的对象.在JDK1.2之后提供了WeakReference类来进行弱引用. 4.虚引用:虚引用也被称为幽灵引用或者幻影引用,它是最弱的一种引用关系.一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例.为一个对象设置虚引用的唯一目的就是能在这个对象被收集器回收时收到一个系统通知.在JDK1.2之后,提供了PhantonReference类来提供虚引用.
http://www.zqtcl.cn/news/998297/

相关文章:

  • 网站的建立目的来宾网站优化
  • 建设国家游戏网站网站建设规范方案
  • 做网站价位wordpress tag 列表
  • 网站建设 李奥贝纳百度软文推广公司
  • 网站建设流程平台企业微信开发者文档
  • 唐山建设网站的网站青海网站建设企业
  • 北京企业建站系统模板网站建设公司专业网站科技开发
  • 工商注册在哪个网站手机浏览器网站开发
  • 建设电影网站的目的各个国家的google网站
  • centos 网站搭建中国互联网协会调解中心
  • 手机端视频网站模板下载做单页网站需要做什么的
  • 太原网站建设外包中国做乱的小说网站
  • 青海做网站哪家好旅游网站的功能及建设
  • 百度网站优化工具汉川网页设计
  • 网站标签优化怎么做可以看图片的地图什么软件
  • 品牌网站建设9小蝌蚪9wordpress会务网站模版
  • 免费推广网站入口202网页与网站建设
  • 武夷山市网站建设网站标签制作
  • 广州网站定制开发方案河南省新闻发布会直播
  • 普陀网站建设哪家便宜网站建设辶金手指排名十五
  • 网站怎么做百度百科租房网站开发视频教程
  • 动态做网站做自己的网站不是免费的
  • 小学校园门户网站建设方案宁波seo软件
  • 想自己做网站做推广从哪些方面进行网站建设
  • 北京南站在哪个区哪个街道html表白简单代码
  • 海口网站建设流程郑州三牛网站建设
  • 谁有国外hs网站沈阳关键字优化公司
  • wordpress双站企业品牌类网站
  • 网站架构软件做淘客app要网站吗
  • 云南云桥建设股份有限公司官方网站汽车seo是什么意思