搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
程序代码艺术家
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
从零学习Linux操作系统 第二十二部分 企业域名解析服务的部署及安全优化
2
Python实现PDF文件转表格_python plumber table
3
Git起步-安装与配置_gitforce
4
5G NR Rel16 两步接入/2-step RACH
5
史上最全的Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了!
6
Intel RealSense D435i:ROS接口相关配置和启动参数的进一步学习_d435启动画面有线
7
Android面试常见问题总结_systemui面试
8
Android音频系统之音频基础_估计知道这个定律的人比较少,它是音频系统中计算声音大小的一个重要依据。从严格
9
MySQL的batch模式_mysql batch
10
Tomcat中部署Web应用的四种方式_tomcat配置web项目
当前位置:
article
> 正文
Thinking in java-4 Java内存管理之垃圾回收Garbage Collection_garbagecollector copy: accumulated time spent in c
作者:程序代码艺术家 | 2024-01-30 20:43:25
赞
踩
garbagecollector copy: accumulated time spent in collection
1. 垃圾回收机制
1.1. 自动垃圾回收
Java编程语言的一个特色就是其自动垃圾回收机制,不像C/C++那样,内存的分配和释放都是程序员手动操作的。
有人
认为,碎片化(not GC)是影响java程序性能的主要原因。当前主流(并不一定是最新的)的处理堆内存碎片化问题的解决方式是分代GC&紧致(Generational GC & compaction)。
1.2. GC的运行原则和机制
Garbage Collector垃圾回收器,是在后台运行的程序,它照看所有内存中的对象,找到没被程序中任何其他部分所引用的对象。所有这些未被引用的对象被删除,其空间被释放用来分配给其他对象。
当我们命令行运行一个程序时,如果设置命令行参数
java -Xmx:2g MyApp
, 则表示分配了2g的内存给该java进程,即heap内存。在程序运行时,总有堆内存耗尽的时刻,这时新的线程因为没有连续内存空间而无法被创建。这个时候JVM决定开始进行garbage collection,当然我们也可以显式地调用Sys tem.gc()来建议JVM进行垃圾回收 (之所以说是建议,因为JVM并不一定保证会进行垃圾回收)。
GC的进行需要有2个条件满足:1). 绝不回收当前依然存活的对象--有活跃引用的对象。2). 成为垃圾的对象dead objects也不是保证被立即回收的。这取决于回收策略:是保证足够的内存使用还是保证系统整体的延迟和吞吐量的考量。
1.3. 2类垃圾回收方案:
a).
Referencing Counting collectors: 引用计数垃圾回收器
思想:记录下指向每一个对象的引用数量,一旦一个对象的引用数为0则将其回收。
优点:可以立即对称为垃圾的对象进行回收,速度快;且算法简单。
缺点:其一,当对象过多时,开销大;其二,主要原因--无法解决循环引用对象问题Circular referencing.\
b).
Tracing collectors: 跟踪回收器
思想:所有活的 live对象可以在当前已知的活的对象(root object 存在于 registers, global fields, stack frames)中找到其引用。
优点:解决了循环结构问题(本文之后所有内容都是针对于Tracing collectors而言的)。
缺点:对大部分跟踪收集器而言,在标记阶段--在回收未被引用的垃圾对象时需要等待。
1.4. 2大类Tracing Collector
1.4.1 复制回收器Coping Collectors
原理:在堆上有2块单独定义的地址from-space & to-space, 在垃圾回收时,from-space的存活的对象被复制到to-space中,然后from-space中进行垃圾回收。
优点:在 to-space中对象在内存中很紧致地放在一起, 完全没有了内存碎片化的烦恼。
缺点: 复制回收器是一种 stop-the-world collector, 意味着在垃圾回收循环中,其他应用不能执行,这对于需要高响应速度的应用而言无法容忍;而且,当from-space中的所有对象都不是垃圾--都是live对象时,to-space需要有很大空间存放from-space内容,这也使得其效率很差。
1.4.2 标记-清理回收器Mark-and-sweep collector
大部分商业JVM是使用mark-and-sweep 垃圾收集器的, 因为它没有copy-collector的负面性能缺点。一些最著名的回收策略包括:CMS, G1, GenPar(
link
)都是采用mark-and-sweep策略的!
原理:
mark-and-sweep 垃圾回收器跟踪并标记每个live对象用一个'live'标志位。在所有的live对象都已被mark之后,进行的将是sweep操作;sweep将遍历整个heap空间,找到未被标记的内存空间地址,收集器将这些未被标
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/article/detail/49346
推荐阅读
article
java
Web实现用户登录功能_
java
web写一个登录注册界面...
文章浏览阅读7.5k次,点赞18次,收藏249次。登录页面login.jsp,输入用户名和密码后,跳转到登录处理程序Lo...
赞
踩
article
[
云计算
| AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3...
文章浏览阅读3k次,点赞26次,收藏27次。在本博文中,我们将探讨如何使用 Java 检查指定的秘钥是否存在于亚马逊 S...
赞
踩
article
[
云计算
| AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象...
文章浏览阅读3.7k次,点赞36次,收藏28次。Amazon Simple Storage Service(Amazon...
赞
踩
article
Java
算法
篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)...
单链表的反转是指将链表中的节点顺序逆转,即原先的链表尾部变成了头部,头部变成了尾部。比如,[1,2,3,4,5,6,7]...
赞
踩
article
如何在 Java 中将 InputStream 读取/转换为字符串?_inputstream转字符串...
如果您有一个 java.io.InputStream 对象,您应该如何处理该对象并生成一个 String?假设我有一个包...
赞
踩
article
猿创征文|弃文从工,从小白到蚂蚁工程师,我的 Java 成长之路...
最近 CSDN 开展了猿创征文,希望博主写文章讲述自己在某个领域的技术成长历程。之前也曾想找个机会写篇文章,记录下自己的...
赞
踩
article
【Java】你掌握了多
线程
吗?...
互联网的每一个角落,无论是大型电商平台的秒杀活动,社交平台的实时消息推送,还是在线视频平台的流量洪峰,背后都离不开多
线程
...
赞
踩
article
[
云计算
| AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全...
在本文中,我们将探索如何利用 Java 编程与 Amazon S3(即简单存储服务)存储系统进行互动。需要牢记,S3 的...
赞
踩
article
Java LeetCode篇-深入了解关于单
链表
的经典解法...
1.0 移除
链表
元素、2.0 反转
链表
、3.0
链表
中倒数第 k 个节点、4.0 合并两个有序
链表
、5.0
链表
的回文结...
赞
踩
article
学生管理系统--
课程设计
项目(Java+SQL server)_
java
和sql server 20...
因为项目不方便直接发上来,所以大家需要源码的话就私我叭~_
java
和sql server 2012
课程设计
‘
java
和...
赞
踩
article
[
云计算
| AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3...
在本博文中,我们将探讨如何使用 Java 检查指定的秘钥是否存在于亚马逊 S3 存储桶中。Amazon S3 是一个非常...
赞
踩
article
【JAVA】分布式链路追踪技术概论...
进来!只花五分钟学懂!采用分布式架构时,一次请求报错难以定位,分布式链路追踪技术来解决。【JAVA】分布式链路追踪技术概...
赞
踩
article
Java Web3J :使用
web3
j调用自己的
智能合约
的方法(教程)...
web3
j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊
智能合约
...
赞
踩
article
[
云计算
| AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全...
在本文中,我们将探索如何利用 Java 编程与 Amazon S3(即简单存储服务)存储系统进行互动。需要牢记,S3 的...
赞
踩
article
java.net.NoRouteToHostException No route to host的排...
那问题肯定就出在这个datanode22中了,经过简单的测试发现,在HiveSQL的执行过程中,
hadoop
的心跳时间经...
赞
踩
article
解决思路:
java
.lang.IllegalArgumentException: Invalid c...
然后,我们设置了请求方法为POST,并设置了请求头部信息,包括Content-Type和Accept。通过检查代码中的方...
赞
踩
article
【Java SE】带你识别什么叫做异常!!!...
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的...
赞
踩
article
Java
算法
篇-深入理解递归(递归实现:青蛙爬楼梯)...
假设第一个元素已经排序好了的,在已经排好的元素的后一个元素记录为 low,这个 low 索引对应的元素需要用临时变量来接...
赞
踩
article
【Java SE】
类和对象
(下)...
在文件的最上方加上一个package语句指定该代码在哪个包中.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形...
赞
踩
article
【Java 基础篇】Java Set 详解...
Set接口继承自Collection接口,并添加了一些针对无序集合的操作。它不允许重复的元素,并提供了添加、删除和检查元...
赞
踩
相关标签
java
前端
servlet
云计算
aws
云平台
算法
rxjava
boosting
iot
webstorm
rust
职场和发展
开发语言
线程