JVM中对象的分配

本文探讨了JVM中对象的内存分配,包括对象在堆的新生代Eden区分配、特殊情况下的老年代分配、对象年龄与晋升机制、大对象直接进入老年代策略以及空间分配担保等。通过对内存分配规则的讲解,帮助理解JVM内存管理。
摘要由CSDN通过智能技术生成

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们会在下面的内容去介绍虚拟机中的垃圾收集算法,现在我们来探讨一下给对象分配内存的那点事儿。
知道JVM对象分代,了解虚拟机优化。
1.了解对象在各个年代的状态。
2.了解垃圾回收机制。
JVM会怎么分配内存?大多数人的回答是内存分为堆和栈,但实际上内存的分配比堆栈更严格
内存被划分为5个大区:程序计数器、本地方法栈、虚拟机栈、堆、方法区。

程序计数器(线程独享)当前线程所执行的字节码的行号指令器,通过改变计数器的值选取虚拟机下一条需要执行的字节码指令,分支、循环、跳转、异常、线程恢复等基础功能。

虚拟机栈(线程独享)JAVA方法执行的内存模型,每个方法在执行的同时都会存建一个栈帧用于存储方法出口、局部变量表、操作数栈、动态连接等信息,局部表量表(大多数人认为的栈)用于存放可知各种数据类型(Boolean、byte、char、short、int、float、long、double)、对象引用类型和returnAddress(指向了一个字节码指令地址)

本地方法栈与虚拟机栈的作用非常相似,它们之间的区别是虚拟机栈为虚拟机执行JAVA方法服务,本地方法栈为Native方法服务。

方法区(线程共享)被虚拟机加载的常量、静态量、方法描述、类信息等。JAVA虚拟机规范把方法区描述为堆的一个逻辑部分,但它还有一个别名叫做Non-Heep 运行时常量池:方法区的一部分,用于存放编译时的字面量、符号引用。

堆(线程共享)在分配对象时,对象包括了三部分内容:对象头(存储自身运行数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值