IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java对象内存分配 -> 正文阅读

[Java知识库]java对象内存分配

在这里插入图片描述
分配原则

一般来讲,new一个对象后,内存一般分配在堆空间中,但也有一些例外。有些对象会分配在栈上或者TLAB中。如果可以在栈上分配,就直接在栈上分配,不行就会进行TLAB分配,再不行就判断是否是大对象,大对象直接进入老年代,再不行就分配到eden区,eden若是空间不够,就会进行一次MinorGC。

大对象

顾名思义就是很大的对象,需要大量的连续内存空间,jvm会让这种对象直接进入老年代,减少eden和两个survivor区发生大量的内存复制,提高效率。

栈上分配

大家都知道,在jvm中堆是线程共享的,也就是说堆里存的东西对于所有的线程都是可见的,可访问的,虚拟机中的垃圾回收才可以回收堆中的没有被引用的对象。但是,若是有对象的作用域不会逃离方法之外,那么,这个对象就可以分配在栈中。随着方法的结束而销毁,无需回收。这就是栈上分配

TLAB分配

本地线程分配缓冲(Thread Local Allocation Buffer即TLAB,为每?个线程预先分配?块内存,JVM在给线程中的对象分配内存时,?先在TLAB分配。

由于对象一般会分配在堆上,而堆是全局共享的。因此在同一时间,可能会有多个线程在堆上申请空间。为了保证同一快内存的线程安全JVM有两种方式

一:CAS,?较和交换(Compare And Swap): CAS 是乐观锁的?种实现?式。所谓乐观锁就是,每次不加锁?是假设没有冲突?去完成某项操作,如果因为冲突失败就重试,直到成功为?。虚拟机采? CAS 配上失败重试的?式保证更新操作的原?性。

但是很多线程同时申请内存时。CAS效率就会变得低下,所以,JVM在给线程中的对象分配内存时,?先在TLAB分配,当对象?于TLAB中的剩余内存或TLAB的内存已?尽时,再采?上述的CAS进?内存分配。

在给对象分配内存时,每个线程使用自己的TLAB,这样可以避免线程同步,提高了对象分配的效率。 TLAB本身占用eEden区空间,在开启TLAB的情况下,虚拟机会为每个Java线程分配一块TLAB空间。TLAB空间的内存非常小, 缺省情况下仅占有整个Eden空间的1%, 由于TLAB空间一般不会很大,因此大对象无法在TLAB上进行分配,总是会直接分配在堆上。TLAB空间由于比较小,因此很容易装满。

比如,一个100K的空间,已经使用了80KB, 当需要再分配一个30KB的对象时,肯定就无能为力了。这时虚拟机会有两种选择,第一,废弃当前TLAB,这样就会浪费20KB空间;第二,将这30KB的对象直接分配在堆上,保留当前的TLAB。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:45:25  更:2022-01-28 11:47:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:00:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码