java中gc是怎么工作的_java中的GC(gabage collection)如何工作
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)如何工作相关推荐
- java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?
本文由读者 muggle 投稿,muggle 是一位极具极客精神的 90 后单身老实猿,他的博客地址是:http://muggle.javaboy.org/ 今天介绍两个大家每天都在用但是却很少去了解 ...
- java如果把字符串转成对象_Java中的重复对象:不仅仅是字符串
当Java应用程序消耗大量内存时,它本身就会出现问题,并可能导致GC压力增加和GC暂停时间过长.在我之前的一篇文章中,我讨论了Java中常见的内存浪费源:重复字符串.两个 java.lang.Stri ...
- java中char是几个字节_Java中char占用几个字节
在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...
- Java传统的io和nio区别_Java中IO和NIO的本质和区别
简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就 ...
- java语言中的数据是如何定义_java中的数据类型
java中的数据类型 java语言的数据类型包括两种,基本数据类型和引用数据类型. 定义 基本数据类型:变量名指向具体的数值. 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值. ...
- java 继承 实现 会重写 方法吗_java 中继承,组合,重载,重写的实现原理 (转)...
我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...
- java的迭代器类中有哪些类_java中的集合类 以及 迭代器
/* java中的集合类 实现了 Connection接口 ArrayList这个集合类 java.util.*这个包的类 toArray()方法可以返回一个 Object类型的对象数组 我们部 ...
- java访问方法修饰词四个_java中的四个修饰词(访问权限)
Java类成员的访问控制权限 有了包的概念之后,下面就可以开始为读者讲解 JAVA 语言之中的访问控制权限 的概念了.在 JAVA 中有四种访问控制权限,分别为:private.default.pro ...
- java购买同一件商品时加锁_java中CAS的ABA问题思考和整理(不看后悔系列)
前言 听说经常面试被问到~今天同事说了这个问题,就查了一下这问题,觉得挺有意思的,就整理出来跟大家分享下.主要思考下面几个问题: 1.什么是CAS? 2.什么是CAS的ABA问题? 3.怎么解决这个问 ...
- java中子类与父类强制转换_java中父类强制转换成子类的错觉
引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...
最新文章
- Oracle RAC删除节点
- python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...
- 13-Qt6 QMap
- 7-Qt6 qDeleteAll内存管理
- turtle库是python的第三方库吗_turtle库的使用
- 16-djongo中间件学习
- Java—线程的生命周期及线程控制方法详解
- ListView使用BaseAdapter与ListView的优化
- 思科钱伯斯:云安全是根本
- Angular.js学习笔记(1)
- linux磁盘介绍及磁盘分区
- 爱心特效代码(HTML超文本标记语言,直接改记事本后缀)
- WIFI热点软件测试,用手机WiFi热点已OUT 华为随行WiFi Plus评测
- C51玩8x8LED点阵:PointGame —— 收藏数爆炸的LED小游戏
- 订单23系统服务器,《死亡搁浅》订单23怎么完成?系统服务器订单任务攻略
- UVM交互式调试库:缩短调试周转时间
- ios6.0 siri语音识别
- java 计算π_Java实现计算圆周率π的两种方法 - 博客频道 - CSDN.NET
- 史上最污技术解读,老司机瞬间开车!
- 英语入门造句专用动词表(96个)
热门文章
- HTML基础(part1)--预备知识
- SAP UI5 初学者教程之二十 - SAP UI5 的表达式绑定用法讲解
- SAP 电商云 Spartacus UI added-to-cart 的端到端测试源代码解析
- SAP 电商云 Spartacus UI Quick Order 的路由和 CMS 实现
- SAP Spartacus category navigation页面鼠标进入事件的处理
- Angular input控件的click事件表达式如何被转换成JavaScript函数
- SAP Analytics Cloud的Sample Story
- SAP物料主数据创建时间和创建个数的函数关系
- 那些年陪我走过一个又一个加班夜晚的程序员鼓励师们
- SAP UI5 onDataLoaded hook的用法