| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> JVM-03.对象创建与内存分配 -> 正文阅读 |
|
[Java知识库]JVM-03.对象创建与内存分配 |
1.对象创建的流程
否
是
类加载检查
类是否已加载?
加载类
分配内存
初始化
设置对象头
执行<init>方法
1.类加载检查 2.内存分配
什么是java对象的指针压缩? 5.执行init方法 2.对象的内存分配
对象在栈上的分配 : ??????? JVM通过逃逸分析参数(-XX:+DoEscapeAnalysis)来优化对象内存分配位置(JDK7后默认开启),使其通过标量替换优先分配在栈上。 标量替换: 通过逃逸分析确定该对象不会被外部访问,并且对象可以被进一步分解时,JVM不会创建该对象,而是将该对象成员变量分解若干个被这个方法使用的成员变量所代替,这些代替的成员变量在栈帧或寄存器上分配空间,这样就不会因为没有一大块连续空间导致对象内存不够分配。 标量与聚合量: 标量是不可被进一步分解的量,JAVA的基本数据类型就是标量(如:int,double等基本数据类型以及reference类型等)。 聚合量是可以被进一步分解的量。JAVA中一些对象就是可以被进一步分解的聚合量。 对象在新生代的分配 : 注意: 当Eden区空间不足且survivor不足以容纳新生代的对象时会提前移到老年代中去。 ??????? 新生代对象大多存活时间很短,JVM默认eden:from:to区8:1:1,如果不开启参数-XX:-UseAdaptiveSizePolicy关闭自适应这个比例会动态变化。设置时eden区尽量的大,survivor区够用即可。 大对象的分配 : 长期存活的对象将进入老年代 : 对象动态年龄判断 : 老年代空间分配担保机制 : |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 2:29:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |