Java New对象分配内存流程

一、流程图

示例: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.mzph.cn/news/118882.shtml

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

相关文章

VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群

Hello,world! 🐒本篇博客使用到的工具有:VMware16 ,Xftp7 若不熟悉操作命令,推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机(Virtual Machine) 指通过…

对于多分类问题,使用深度学习(Keras)进行迁移学习提升性能

本文是仿照前面的文章,使用Keras迁移学习提升性能,原文是针对二分类问题,使用迁移学习的方式来提升准确率,本文用迁移学习的方式来提升多分类问题的准确率。 同时,在前面的文章中,使用普通的小型3层卷积网络+2层全连接层实现了多分类的85%左右的准确率, 此处将用迁移学…

Mybatisplus 常用注解

一、Mybatisplus 注解 TableName 表名注解,标识实体类对应的表 Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) public interface TableName {// 表名String value() default "";// schema…

最适合用来编写程序、网站、AI的编程语言分别是什么?

编写程序最适合的语言: Python:Python 是一种解释性、面向对象、动态语言。它是一种易于学习的语言,适合编写小型到大型的应用程序。由于其简单易用的语法和广泛的支持库,Python 成为了数据科学和机器学习领域的首选语言。同时&a…

XTU-OJ 1227-Robot

题目描述 假设在一个XOY坐标的平面上,机器人一开始位于原点,面向Y轴正方向。 机器人可以执行向左转,向右转,向后转,前进四个指令。 指令为 LEFT:向左转RIGHT:向右转BACK:向后转FORWORD n:向前走n(1≤n≤100)个单位 现在…

【环境】Linux下Anaconda/ Miniconda安装+百度Paddle环境搭建+Cudnn(3090显卡+CUDA11.8+cudnn8.6.0)

清华源帮助链接:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/ 下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 其他深度学习环境相关博文:【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境…

计算机网络-TCP协议

面向连接的运输:TCP TCP连接 TCP被称为面向连接的,因为在应用程序开始互传数据之前,TCP会先建立一个连接,该连接的建立涉及到三次“握手”。 TCP的连接不是一条真实存在的电路,而是一条逻辑链接,其共同状…

SpringBoot篇---第四篇

系列文章目录 文章目录 系列文章目录一、springboot常用的starter有哪些二、 SpringBoot 实现热部署有哪几种方式?三、如何理解 Spring Boot 配置加载顺序? 一、springboot常用的starter有哪些 spring-boot-starter-web 嵌入tomcat和web开发需要servlet…

shell编程(第14篇:管道符号的妙用)

前言 类Unix系统中,有非常多的命令,如果每个命令都只能独立运行,无法发挥他们的作用,前辈们利用管道,把命令组合在一起使用,管道也是进程间通信的方式之一 管道符 在shell编程中,管道符用竖线字…

遍历树形结构记录

例如: 这是递归对树形结构的遍历 findMatchingValue(json1,json2){ if(json1.defaultLabel&&json2.some(item>item.titlejson1.defaultLabel)){ //将匹配的值保存起来 this.matchedValue.push(json1.defaultLabel) } if(json1.childrens&&json1.childrens.…

8.3 矢量图层点要素单一符号使用二

文章目录 前言单一符号(Single symbol)渲染图片标记(Raster Image marker)QGis代码实现 动画标记(Animated marker)QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中简单标记和svg标记本…

Docker 启动远程服务访问不了

今天一下午在弄这个 1、防火墙是否关了 firewall-cmd --state2、ip转发开没开 sysctl net.ipv4.ip_forward3、service iptables是不是打开并拦截了 4、检查docker启动的端口号是否一致,或者启动时对不对 5、检查docker的服务是否起来了,比如你的端口号…

软考 系统架构设计师系列知识点之设计模式(5)

接前一篇文章:软考 系统架构设计师系列知识点之设计模式(4) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 3. 行为型模式 行为型模式可以影响一个系统的状态和行为流。通过优化状态…

Go 语言访问 Redis 笔记

文章目录 Mac 下载 RedisMac Redix 数据库打开服务端客户端 导包连接数据库操作字符串操作 Hash设置过期时间队列操作连接池并发操作管道化操作事务操作 Mac 下载 Redis Mac安装Redis,原来就是这么简单 Mac Redix 数据库打开 brew services start redis 服务端 …

SiteGround主机最新购买使用指南及外贸建站教程

SiteGround是一家知名的虚拟主机服务提供商,它在过去几年中在WordPress和WooCommerce建站领域取得了显著的发展和改进。SiteGround致力于为用户提供专门针对WordPress优化的虚拟主机,并将WordPress深度集成到其主机服务中,使外贸建站过程变得…

司徒理财:10.26周四黄金走势分析,黄金操作策略,谨慎追多

黄金走势分析:      黄金依旧是震荡走势不变,昨日给的文章策略可谓神准!亚欧盘现价1970提示做多,美盘1987提示做空,一来一回,又是大肉!震荡走势,高抛低吸,最忌追涨杀…

gstreamer插件开发-What are states?

## What are states?状态描述元素实例是否初始化、是否准备好传输数据以及当前是否正在处理数据。在GStreamer中定义了四种状态: > - GST_STATE_NULL> - GST_STATE_READY> - GST_STATE_PAUSED> - GST_STATE_PLAYING 从现在开始,它们将被简单地称为“NU…

GPT的前世今生:从gpt1到chatgpt的能力提升

从2017年google brain提出transformer模型,到2018年基于transformer模型open ai推出了gpt1模型以及google推出了bert模型,到2019-2021年open ai陆续推出gpt2和gpt3,再到2022-2023年推出chat-gpt和gpt4,大语言模型已经发展成了一个…

遥感语义分割、变化检测论文小trick合集(持续更新)

目录 💗💗1.影像融合机制 💗💗2.上下文聚合模块 💗💗3.adapter即插即用模块 💗💗1.影像融合机制 参考【多源特征自适应融合网络的高分遥感影像语义分割】文章中的“多源特征自适应…

【软考】数据库篇:并发控制-数据不一致问题

简介 本文介绍软考数据库篇,关于事务的考核内容。软考在数据库事务篇的考察,几乎都是出选择题类题目,不过在数据库系统工程师的内容里,会在下午提以一个小题出现,可见还是比较重要的知识点。 考纲内容 考核并发控制…