1.

“引用记数(reference counting)”是一种简单但速度很慢的垃圾回收技术。每个对象都含有一个引用记数器,当有引用连接至对象时,引用计数加1。当引用离开作用域或被置 为null时,引用计数减1。虽然管理引用记数的开销不大,但需要在整个程序生命周期中持续地开销。垃圾回收器会在含有全部对象的列表上遍历,当发现某个 对象的引用计数为0时,就释放其占用的空间。这种方法有个缺陷,如果对象之间存在循环引用,可能会出现“对象应该被回收,但引用计数却不为零”的情况。对 垃圾回收器而言,定位这样存在交互引用的对象组所需的工作量极大。引用记数常用来说明垃圾收集的工作方式,似乎从未被应用于任何一种Java虚拟机实现 中。

2.

Java虚拟机将采用一种“自适应”的垃圾回收技术。至于如何处理找到的存活对象,取决于不同的Java虚拟机实现。有一种作法名为“停止——复制” (stop-and-copy)。这意味着,先暂停程序的运行,(所以它不属于后台回收模式),然后将所有存活的对象从当前堆复制到另一个堆,没有被复制 的全部都是垃圾。当对象被复制到新堆时,它们是一个挨着一个的,所以新堆保持紧凑排列,然后就可以按前述方法简单、直接地分配新空间了。

3.

Java虚拟机中有许多附加技术用以提升速度。尤其是与加载器操作有关的,被称为“即时”(Just-In-Time,JIT)编译的技术。这种技术可以 把程序全部或部分翻译成本地机器码(这本来是Java虚拟机的工作),程序运行速度因此得以提升。当需要装载某个类(通常是在你为该类创建第一个对象) 时,编译器会先找到其 .class 文件,然后将该类的字节码装入内存。此时,有两种方案可供选择。一种是就让即时编译器编译所有代码。但这种做法有两个缺陷:这种加载动作散落在整个程序生 命周期内,累加起来要花更多时间;并且会增加可执行代码的长度(字节码要比即时编译器展开后的本地机器码小很多),这将导致页面调度,从而降低程序速度。 另一种做法称为“惰性编译(lazy uation)”,意思是即时编译器只在必要的时候才编译代码。这样,从不会被执行的代码也许就压根不会被JIT所编译。新版JDK中的Java HotSpot技术就采用了类似方法,代码每次被执行的时候都会做一些优化,所以执行的次数越多,它的速度就越快。

注释:

1.垃圾对象可能不被垃圾回收;

2.垃圾回收并不等于“析构”(区分与c++)

java中gc是怎么工作的_java中的GC(gabage collection)如何工作相关推荐

  1. java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?

    本文由读者 muggle 投稿,muggle 是一位极具极客精神的 90 后单身老实猿,他的博客地址是:http://muggle.javaboy.org/ 今天介绍两个大家每天都在用但是却很少去了解 ...

  2. java如果把字符串转成对象_Java中的重复对象:不仅仅是字符串

    当Java应用程序消耗大量内存时,它本身就会出现问题,并可能导致GC压力增加和GC暂停时间过长.在我之前的一篇文章中,我讨论了Java中常见的内存浪费源:重复字符串.两个 java.lang.Stri ...

  3. java中char是几个字节_Java中char占用几个字节

    在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...

  4. Java传统的io和nio区别_Java中IO和NIO的本质和区别

    简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就 ...

  5. java语言中的数据是如何定义_java中的数据类型

    java中的数据类型 java语言的数据类型包括两种,基本数据类型和引用数据类型. 定义 基本数据类型:变量名指向具体的数值. 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值. ...

  6. java 继承 实现 会重写 方法吗_java 中继承,组合,重载,重写的实现原理 (转)...

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  7. java的迭代器类中有哪些类_java中的集合类 以及 迭代器

    /* java中的集合类   实现了 Connection接口 ArrayList这个集合类  java.util.*这个包的类 toArray()方法可以返回一个 Object类型的对象数组 我们部 ...

  8. java访问方法修饰词四个_java中的四个修饰词(访问权限)

    Java类成员的访问控制权限 有了包的概念之后,下面就可以开始为读者讲解 JAVA 语言之中的访问控制权限 的概念了.在 JAVA 中有四种访问控制权限,分别为:private.default.pro ...

  9. java购买同一件商品时加锁_java中CAS的ABA问题思考和整理(不看后悔系列)

    前言 听说经常面试被问到~今天同事说了这个问题,就查了一下这问题,觉得挺有意思的,就整理出来跟大家分享下.主要思考下面几个问题: 1.什么是CAS? 2.什么是CAS的ABA问题? 3.怎么解决这个问 ...

  10. java中子类与父类强制转换_java中父类强制转换成子类的错觉

    引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...

最新文章

  1. Oracle RAC删除节点
  2. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...
  3. 13-Qt6 QMap
  4. 7-Qt6 qDeleteAll内存管理
  5. turtle库是python的第三方库吗_turtle库的使用
  6. 16-djongo中间件学习
  7. Java—线程的生命周期及线程控制方法详解
  8. ListView使用BaseAdapter与ListView的优化
  9. 思科钱伯斯:云安全是根本
  10. Angular.js学习笔记(1)
  11. linux磁盘介绍及磁盘分区
  12. 爱心特效代码(HTML超文本标记语言,直接改记事本后缀)
  13. WIFI热点软件测试,用手机WiFi热点已OUT 华为随行WiFi Plus评测
  14. C51玩8x8LED点阵:PointGame —— 收藏数爆炸的LED小游戏
  15. 订单23系统服务器,《死亡搁浅》订单23怎么完成?系统服务器订单任务攻略
  16. UVM交互式调试库:缩短调试周转时间
  17. ios6.0 siri语音识别
  18. java 计算π_Java实现计算圆周率π的两种方法 - 博客频道 - CSDN.NET
  19. 史上最污技术解读,老司机瞬间开车!
  20. 英语入门造句专用动词表(96个)

热门文章

  1. HTML基础(part1)--预备知识
  2. SAP UI5 初学者教程之二十 - SAP UI5 的表达式绑定用法讲解
  3. SAP 电商云 Spartacus UI added-to-cart 的端到端测试源代码解析
  4. SAP 电商云 Spartacus UI Quick Order 的路由和 CMS 实现
  5. SAP Spartacus category navigation页面鼠标进入事件的处理
  6. Angular input控件的click事件表达式如何被转换成JavaScript函数
  7. SAP Analytics Cloud的Sample Story
  8. SAP物料主数据创建时间和创建个数的函数关系
  9. 那些年陪我走过一个又一个加班夜晚的程序员鼓励师们
  10. SAP UI5 onDataLoaded hook的用法