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) 指通过…

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的连接不是一条真实存在的电路,而是一条逻辑链接,其共同状…

遍历树形结构记录

例如: 这是递归对树形结构的遍历 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标记本…

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

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

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.影像融合机制 参考【多源特征自适应融合网络的高分遥感影像语义分割】文章中的“多源特征自适应…

快速排序(c语言代码实现)

交换排序:快速排序(不稳定的排序) 快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整…

淘宝商品链接获取淘宝商品评论数据(用 Python实现淘宝商品评论信息抓取)

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取淘宝多网站上的商品详情页面评论内容。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#…

Docker 镜像常用命令总结

目录 1. Docker镜像相关命令(重点掌握) 1.1 docker pull 镜像名称 [:tag] 拉取镜像 1.2 docker search 镜向名称 (查询某个镜像) 1.3 docker images 列出当前主机上所有镜像 1.4 docker rmi 镜像ID 删除镜像 1.5 docker system df 查看所有镜像容器所占空间 2. Docker …

JMeter + Ant + Jenkins持续集成-接口自动化测试

需要安装的工具: jdk1.8jmeter3.2ant1.9jenkins2.1 1、Jdkwin7系统如何安装jdk及环境变量的配置-百度经验 安装包安装设置环境变量验证是否安装正确 Java -version检查,如下就代表安装成功了,环境变量设置就去搜索了,网上很多…

牛客网刷题-(4)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

prosemirror 学习记录(四)decoration

使用 decorations 使用 props - decorations() 添加 decorations 写一个简单的插件:高亮所有 apple 节点 export const MyHighlightApplesPlugin new Plugin({props: {// view 每次变化都会执行 decorations 方法decorations(state) {let arrs [];state.doc.de…

QT项目如何打包成可执行文件

QT项目打包成可执行文件 一 建立一个文件夹二. 编译2.1 打开QT MSVC编译工具2.2 进入publish文件夹 一 建立一个文件夹 例如:publish 二. 编译 2.1 打开QT MSVC编译工具 2.2 进入publish文件夹 cd 路径 执行命令 windeployqt 项目名 例:windeployq…

美海军用于情报、监视和侦察的中大型无人系统概述

源自:中国指挥与控制学会 “人工智能技术与咨询” 发布 简 介 1 引 言 2 超大型无人潜航器 图1 波音“回声航行者”无人潜航器 图2 “虎鲸”超大型无人潜航器 3 中型无人水面舰艇 图3 “海鹰”无人水面舰艇 图4 “海上猎人”无人水面舰艇 4 …

SpringMVC 资源状态转移RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现HiddenHttpMethodFilterRESTful案例 1、RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c…

GO语言代码示例

首先,我们需要安装 rod 库,这是一个用于构建网络爬虫的 Go 语言库。 使用 go get 命令安装 rod 库:go get -u github.com/gofiber/rod 创建一个新的 Go 程序文件,例如:main.go 在 main.go 文件中,导入 r…

都2023年了,诸佬们肯定熟知RabbitMQ了吧

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前入职某税务公司。本篇文章将记录和分享RabbitMQ相关的知识点。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&#xff…