Java New对象分配内存流程

news2024/9/29 23:24:15

一、流程图

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、流程介绍

1、进行逃逸分析,判断是否能够分配到栈上:
Y: 如果能分配到栈上,则进行分配。等方法出栈时,对象内存销毁,可有效减少GC的次数。
N:无法分配到栈上,则判断是否是大对象,通过一个参数来判断对象大小,如果对象内存大则直接分配到old区。最后old区进行FGC结束。如果不够大则进入TLAB,就是伊甸区。
2、伊甸区:分TLAB、S1、S2。如果进行GC机制,没清除到的则进入S1。
5、S1如果进行GC清除,没清除到的对象进入S2。
6、S2如果进行GC清除,没清除到的对象进入S1,循环流程。如果年龄够大的则进入OLD区,老年代,这里进行的是动态年龄判断,动态对象年龄判断,主要是被TargetSurvivorRatio这个参数来控制。而且算的是年龄从小到大的累加和,而不是某个年龄段对象的大小。
7、OLD区,就是老年代都是顽固分子,等老年代满了进行FGC

三、什么是逃逸分析

1.为什么要分配在栈上?

通过JVM内存模型中,我们知道Java的对象都是分配在堆上的。当堆空间(新生代或者老年代)快满的时候,会触发GC,没有被任何其他对象引用的对象将被回收。如果堆上出现大量这样的垃圾对象,将会频繁的触发GC,影响应用的性能。其实这些对象都是临时产生的对象,如果能够减少这样的对象进入堆的概率,那么就可以成功减少触发GC的次数了。我们可以把这样的对象放在栈上,这样该对象所占用的内存空间就可以随栈帧出栈而销毁,就减轻了垃圾回收的压力。

2.什么情况下会分配在栈上?

为了减少临时对象在堆内分配的数量,JVM通过逃逸分析确定该对象会不会被外部访问。如果不会逃逸可以将该对象在栈上分配内存。随栈帧出栈而销毁,减轻GC的压力

3.什么是逃逸分析?

逃逸分析:就是分析对象动态作用域,当一个对象在方法中被定义后,它可能被外部方法所引用,
如果没有被外部的方法使用,那么就建议在栈中分配一块内存空间,用来存储临时的变量。
如果被外部的方法引用了,那就在堆上分配内存空间,实现共享。
JDK 1.6就已经使用逃逸分析了。

四、什么是大对象

在Java中,大对象是指占用大量内存空间的对象。具体来说,如果一个对象的大小超过了堆内存的一半,那么它就被认为是一个大对象。

大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。

五、什么是TLAB

TLAB的全称是Thread Local Allocation Buffer,翻译过来就是线程本地分配缓存。

首先从Thread
Local这两个单词能够联想到一个本地线程变量类ThreadLocal,该类可以用来维护线程私有变量,而TLAB则是一个线程专用的内存分配区域,也是线程私有的。

1、那为什么需要TLAB呢?
在日常的业务过程中,Java对象会不断的被新建和不断的被回收,这就涉及到对象的分配了,而新建的对象一般都是分配在堆上,而堆却是线程共享的。所以如果同一时间,有多个线程要在堆上申请空间,这里可以类比多线程访问共享变量的操作,要保证共享变量的线程安全,就得采取线程安全的手段。所以每一次对象分配都要做同步,而越多的线程要在堆上申请空间,竞争就会越激烈,效率就会降低。因此Java虚拟机采用了TLAB这种线程专属的区域来避免出现多线程冲突,提高对象分配的效率。TLAB是默认启动的,在该情况下,JAVA虚拟机会为每一个线程都分配一个TLAB区域。

2、TLAB区域在堆中的哪个区域?
Eden区,因为eden区一般是新建对象所在的区域(这里去除大对象,因为大对象会直接进入老年代)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里7年经验之谈 —— 如何实现前端项目的自动化测试?

这其实就是我们常说的“UI自动化测试”,针对这个问题,我先告知答题思路如下: 1、什么是UI自动化?有什么优势? 2、UI自动化实践中会遇到什么难题? 3、如何解决难题,将UI落实到实践中?…

Go学习第七章——数组arr,切片slice和映射map

Go数组arr,切片slice和映射map 1 数组1.1 快速入门1.2 数组的内存布局1.3 四种初始化数组的方式1.4 数组的遍历1.5 注意事项以及分析1.6 数组反转1.7 二维数组 2 切片2.1 快速入门2.2 内存解析2.3 切片的使用和遍历2.4 注意事项和细节说明2.5 string和slice关系2.6 …

基于大数据的社交平台数据爬虫舆情分析可视化系统 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据…

充气膜结构的内压设计应考虑哪几种状态?

内压是充气膜结构独有的设计参数,也是结构形成刚度维持稳定的核心因素。同时,作为一种长期荷载保持结构在外荷载作用下具有的合理刚度,调整结构形态,以免产生过大变形、膜材失效褶皱等状况。结构的内压随不同气候条件进行调整&…

【MySQL-->数据操作】

文章目录 前言一、insert1.单行插入2.多行插入3.插入更新/替换 二、select1.全列查询2.指定列插入3.列别名4. 表达式计算5.去重6.where条件查询7.排序8.limit分页显示 三、update四、delete五、插入查询结果六、聚合函数六、聚合分组1.格式2.where和having的区别 前言 一、inse…

文心一言 VS 讯飞星火 VS chatgpt (120)-- 算法导论10.3 5题

五、用go语言,设 L 是一个长度为 n 的双向链表,存储于长度为 m 的数组key、prev 和next 中。假设这些数组由维护双链自由表 F的两个过程 ALLOCATE-OBJECT 和 FREE-OBJECT 进行管理。又假设 m 个元素中,恰有 n 个元素在链表 L 上,m…

BUUCTF 乌镇峰会种图 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 乌镇互联网大会召开了,各国巨头汇聚一堂,他们的照片里隐藏着什么信息呢?(答案格式:flag{答案},只需提交答案&#xff0…

Linux NFS的整体架构与核心代码解析

前面文章我们从应用层面对NFS进行了介绍,接下来的文章我们将进入实现层面。本文首先从整体上对Linux的NFS软件架构进行介绍,然后介绍代码与实际业务逻辑介绍一下NFS的处理流程。 NFS文件系统的架构分析 NFS分布式文件系统是一个客户端-服务端架构&#…

从力扣[203]理解递归思想

本文旨在通过使用递归方法的使用来进一步了解递归思想 class Solution {public ListNode removeElements(ListNode head, int val) {if (head null) {return head;}head.next removeElements(head.next, val);return head.val val ? head.next : head;} }既然要使用递归算法…

LVS+keepalive高可用集群

keepalive简介 keepalive为LVS应用延伸的高可用服务。lvs的调度器无法做高可用。但keepalive不是为lvs专门集群服务的,也可以为其他的的代理服务器做高可用。 keepalive在lvs的高可用集群,主调度器和备调度器(可以有多个) 一主两备或一主一备。 VRRP: k…

【全国数据】全国各省点状地名(村)矢量数据下载

文章目录 全国数据预览分省数据预览 全国数据预览 分省数据预览 青海省: 甘肃省: 安徽省: 湖南省:

freeCAD不合并导入step文件

1.问题描述 在使用freeCAD导入step文件的时候,一开始会导入成一个成体,想隐藏某些部件,却只能隐藏整个装配体,就是图示位置无法展开。 2.解决方法 找到首选项把第5步里面的不打钩就可以了。 3.freeCAD的用处 这个主要的用处还是用…

NOIP2023模拟1联测22 爆炸

NOIP2023模拟1联测22 爆炸 题目大意 ​ 自己看 思路 当一个炸弹被引爆后,它的方向是固定的。如果被竖着引爆,那么应该选择横着引爆,否则选择竖着引爆,这是显然 的。 考虑对于每个炸弹 ( i , j ) (i , j) (i,j) 将第 i i i 行…

前端视角看 Docker : 加速开发和部署的利器

Docker 是一个开源的容器化平台,大大的降低了运维相关的工作。在日常开发中,中小公司很少有专职运维,所以在开发中通过使用 Docker,前端相关工作可以更加高效地构建、打包、部署和运行应用程序。此系列将从前端的视角出发&#xf…

LeetCode刷题---简单组(二)

文章目录 🍒题目一 14. 最长公共前缀🍒解法一🍒find函数 🍒题目二 13. 罗马数字转整数🍒解法一🍒题目三 9. 回文数🍒解法一 🍒题目一 14. 最长公共前缀 编写一个函数来查找字符串数组…

使用kettle进行正则表达式组件日志分析

使用Kettle(Pentaho Data Integration)进行日志分析是一种常见的数据处理任务,特别是当你需要从大量的日志文件中提取和分析数据时。以下是一般步骤: 准备数据源: 确保你有日志文件的数据源,这可以是本地文…

公司内部文件、文档、设计图、源代码、音视频等核心文件数据自动智能透明加密保护,防泄密软件 | 防止外泄系统

天锐绿盾是一种企业级数据加密解决方案,可以实现对办公终端电脑上的文件、文档、设计图、源代码、音视频等数据的透明加密,以防止数据泄露。 天锐绿盾的工作原理是采用内核级透明加密技术,在不影响员工正常工作的情况下,对需要保护…

Vulnhub系列靶机---mhz_cxf: c1f

靶机文档::mhz_cxf: c1f 下载地址:Download (Mirror): 网卡配置 靶机开机后按住shift,出现界面如图,按e键进入安全模式: 找到ro,删除该行后边内容,并将ro 。。。修改为&#xff1a…

Python绘制玫瑰花

程序员的节日到了,给各位程序员花一朵玫瑰吧。 from matplotlib import cm import matplotlib.pyplot as plt import numpy as npfig plt.figure() ax fig.add_subplot(projection3d) [x, t] np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5)…

EtherCAT从站转modbus RTU协议转换网关用modbus slave测试的方法

远创智控YC-ECT-RTU通讯网关具有EtherCAT从站功能,主要功能是将EtherCAT网络和Modbus-RTU网络连接起来。在使用方面,本网关可以连接到EtherCAT总线中作为从站使用,也可以连接到Modbus-RTU总线中作为主站或从站使用。这款通讯网关还支持多种不…