java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...
目录
记录下来方便个人学习复习
注:根据new的参数在常量池中定位一个类的符号引用 --这句话的意思是:常量池相当于c语言中的指针地址集合,所以就是在常量池中保存new对象的地址,通过地址定位对象在堆中的位置
给对象分配内存(两种)
指针碰撞的方式(内存比较规整的情况下)
空闲列表的方式(内存不规整的情况下)
内存是否规整取决于垃圾回收器的策略,当垃圾回收时压缩整理了内存,在内存分配时就是使用内存碰撞的方式
线程安全性问题
线程同步
本地线程分配缓冲
多线程的情况下对象在分配内存的过程中会出现线程安全的问题,所以当每个一线程进来的时候虚拟机都会为每一个线程分配一块独立的内存空间,称之为本地线程分配缓冲
对象结构
Header(对象头)
自身运行时数据(Mark Word)
哈希值、GC分代年龄、锁状态标志、线程持有的锁、偏向线程id、偏向时间戳
类型指针
InstanceData(实例数据)
Padding(队形填充)
对象的创建有指定的大小,比如int类型4个字节,如果数据没有4个字节,现在就需要使用padding填充对象到4个字节
对象的访问定位
句柄
堆中的句柄池保存着堆中对象的实例指针(和对象类型数据的指针,这个指针指向方法区),栈中的对象引用指向这个句柄池,句柄池中的对象指针指向对象实例。所有句柄也叫指针的指针
直接指针
栈中对象的引用直接指向堆中的对象实例(直接指针也保存着对象实例指针和对象数据类型指针)
句柄需要先指向句柄池找到对象实例的地址,再找到对象的实例,需要2步,直接指针直接指向对象的实例,需要1步即可。那么为什么还会有句柄的方式,因为如果对象发生改变(为什么会改变?因为gc算法,当复制或者整理的时候对象实例会移动在堆中的地址)栈中指向句柄池的地址不需要改变,改变的都是句柄池中的地址(句柄池和对象实例都是在堆中,所以在改变句柄池的实例指针就比改变栈中的应用指针方便)。使用直接指针的方式比句柄的方式快,Hotspot使用的是直接指针的方式
注:博文内容来自书本《深入理解Java虚拟机》第2版 周志明著
java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...相关推荐
- java解析dxf文件_浅析JVM方法解析、创建和链接
一:前言 上周末写了一篇文章<你知道Java类是如何被加载的吗?>,分析了HotSpot是如何加载Java类的,干脆趁热打铁,本周末再来分析下Hotspot又是如何解析.创建和链接类方法的 ...
- 百度高级Java三面题目!涵盖JVM +Java锁+分布式等
百度高级Java一面 自我介绍 对象相等的判断,equals方法实现. Hashcode的作用,与 equal 有什么区别? Java中CAS算法? G1回收器讲一下? HashMap,Concurr ...
- java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区
一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾 ...
- Java太密来福_这篇文章就是要让你入门java多线程【多线程入门】-Go语言中文社区...
就在前几天,有位读者朋友私信宜春,说期待出一篇多线程的文章,我当时内心是小鹿乱撞啊-于是这几天茶不思饭不想,好几天深夜皆是辗转反侧,两目深凝,以至于这几天走起路来格外飘飘然,左摇右晃的,魔鬼般的步伐, ...
- java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区
在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...
- java中path和classpath_java中的环境变量path和classpath的作用-Go语言中文社区
path: 提供windows命令行中java指令的可执行文件路径,当我们在命令行中键入指令时,根据环境变量中的path值,找到对应的指令可执行文件进行执行,在我的电脑上java的path值为: 打开 ...
- java面向对象之封装,java面向对象之封装-Go语言中文社区
一直感觉自己对面向对象编程理解的不是很深刻 所以总结下这篇文章留作笔记 共勉 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方 ...
- java+classpath的理解_Java配置path和classpath的含义详解-Go语言中文社区
新入门java的同学经常会问我path和classpath是什么意思,尤其会问classpath是什么意思,为什么只配置一个.就可以.下面以windows系统为例,做一个系统讲解.包含超详细实验数 ...
- java awt run_Java中awt基本组件及其使用方法-Go语言中文社区
1,按钮 此类创建一个标签按钮.当按下该按钮时,应用程序能执行某项动作.它有两种构造方法: public Button() 构造一个标签字符串为空的按钮. public Button(String l ...
最新文章
- Educational Codeforces Round 59 (Rated for Div. 2)
- install tabix/bgzip
- 室外越野组的传感器长度:40厘米,45厘米,50厘米
- decisiontreeregressor_机器学习算法-Decision Tree
- 过滤选择器——可见性过滤选择器
- 【MSDN文摘】使用自定义验证组件库扩展 Windows 窗体: Form Scope
- linux7补丁安全,CentOS自动打重要安全补丁
- 编写一个程序,计算|X-Y|的值,并将结果存入RESULT单元中,其中X和Y都为带符号字数据。
- php post请求后端拿不到值_Ajax 提交POST后,后台php 无法获取$POST值
- apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API
- HDU2020 绝对值排序【入门】
- Java之数据库基础理论
- Qt软件开发-Qt编译zlib完成文件压缩解压(win10)
- Unity 隐藏鼠标
- java堆排序递归代码,无原理版,比较好理解
- 棋牌游戏开发运营技巧列举 如何才能提高平台留存率
- java星星闪烁代码_jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
- ‘python不是内部或外部命令’解决办法
- Linux系统管理--(3)定时、延时任务与存储的基本管理
- 搭建CTF比赛(训练)平台