交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
第1 章:内存分配
分享
未结
0
792
李延
LV6
2021-05-16
悬赏:20积分
# 运行时数据区域 ## 程序计数器 program counter register 可以看作记录当前线程所执行的字节码的行号指示器。这个计数器记录的是正在执行的虚拟机字节码指令的地址。 如果是native方法,这个计数器为空。 这也是唯一一个没有规定任何OutOfMemoryError的区域 ## java虚拟机栈 java virtual machine stacks 这个空间也是线程私有,生命周期与线程相同。每个方法都会创建一个栈。用于存储:局部变量表、操作数栈、动态链接、方法出入口。 局部变量表包括:基本数据类型数据、对象的引用。其中,long和double占 2个局部变量空间(4个字节)其余占1个。当进入一个方法时,这个方法需要在栈中占用多大的局部变量空间是完全确定的。 在这个区域内可能存在2种异常: - StackOverflowError 如果设置了栈的深,超过最大值抛出 - OutOfMemoryError 内存不足时抛出 ## 本地方法栈 与java虚拟机栈 相似,这个是执行native方法的栈。 在这个区域内可能存在2种异常: - StackOverflowError 如果设置了栈的深,超过最大值抛出 - OutOfMemoryError 内存不足时抛出 ## java堆 java堆(heap)时被所有线程共享的一块内存。几乎所有的对象实例都在这里分配内存。 java堆也是垃圾回收的主要区域,再细分为新生代、老年代;新生代又可分为eden和survivor空间。 其中我么可以通过Xmx和Xms控制分配大小 在这个区域内可能存在异常: - OutOfMemoryError 内存不足时抛出 ## 方法区。 该区域也时线程共享。用于存储已被加载的类信息、常量、静态变量等数据。 在这个区域内可能存在异常: - OutOfMemoryError 内存不足时抛出 # 对象占内存空间 本章节主要分析 一个对象在创建后会占用多少内存。 主要分为3块数据:对象头(header)、实例数据(Instance Data)、和对齐填充(Padding) ## 对象头 开启指针压缩后为:32位  ## 实例数据 原生类型(primitive type)的内存占用如下:  reference类型在32位系统上每个占用4bytes, 在64位系统上每个占用8bytes。 ## 对齐填充 HotSpot的对齐方式为8字节对齐:
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号