一、对象的实例化

1、创建对象的方式

2、创建对象的步骤

  脑图:https://www.processon.com/view/link/61701a927d9c087040525226

3、对象属性赋值的步骤

  ①属性的默认初始化——对应脑图中"创建对象的步骤"4
  ②显式初始化——对应脑图中"创建对象的步骤"6
  ③代码块中初始化——对应脑图中"创建对象的步骤"6
  ④构造器中初始化——对应脑图中"创建对象的步骤"6
  注意:②、③是并列的,执行顺序取决于在代码中的先后顺序。
  代码示例:演示②、③执行顺序

 1 public class Main {
2
3 {
4 // ③代码块中初始化: num = 200
5 num = 200;
6 }
7
8 // ①属性的默认初始化: num = 0
9 // ②显式初始化: num = 10
10 int num = 10;
11
12 public static void main(String[] args) {
13 Main m = new Main();
14
15 System.out.println(m.num); // 10
16 }
17 }
18
19
20 public class Main {
21
22 int num = 10;
23
24 {
25 num = 200;
26 }
27
28 public static void main(String[] args) {
29 Main m = new Main();
30
31 System.out.println(m.num); // 200
32 }
33 }

4、从字节码看对象实例化过程

二、对象的内存布局

1、对象头

2、实例数据

3、对齐填充

  脑图:https://www.processon.com/view/link/6170441d63768961e9dc38fc

  代码示例:演示对象内存布局

 1 public class Customer {
2 int id = 1001;
3 String name;
4 Account acct;
5
6 {
7 name = "匿名客户";
8 }
9
10 public Customer() {
11 acct = new Account();
12 }
13
14 }
15
16 class Account {
17
18 }
19
20 // 测试类
21 public class Main {
22 public static void main(String[] args) {
23 Customer cust = new Customer();
24 }
25 }

三、对象的访问定位

1、介绍

  Java虚拟机规范中,并没有明确的规定,采用哪种访问方式。Hotspot采用的是直接指针。
  脑图:https://www.processon.com/view/link/6170d2cf1e0853446e56c089

2、句柄访问

3、直接指针(Hotspot采用)

  注:个人感觉这里有点不对。这里的"对象实例数据"和上面图中的应该不是一回事,不然看起来好像实例数据里面包含了到对象类型数据的指针一样。这里应该叫"对象数据"比较合理一点。
  这个指针,应该是放在对象头里的。

JVM详解(六)——对象的实例化、内存布局与访问定位的更多相关文章

  1. JVM 专题十二:运行时数据区(七)对象的实例化内存布局与访问定位

    1. 对象的实例化 1.1 创建对象的方式 new 最常见的方式 变形1 : Xxx的静态方法 变形2 : XxBuilder/XxoxFactory的静态方法 Class的newInstance() ...

  2. JVM运行时数据区--纵向补充--对象的实例化内存布局与访问定位

    对象的实例化 创建对象的方式 1.new:最常见的方式(本质是构造器) 变形1 : Xxx的静态方法 变形2 : XxBuilder/XxoxFactory的静态方法 2.Class的newInsta ...

  3. 【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位

    对象实例化内存布局与访问定位 从各自具体的内存分配上来讲 new 的对象放在堆中 对象所属的类型信息是放在方法区的 方法当中的局部变量放在栈空间 这 new 的对象怎么把三块粘合到一起 就是这章的内容 ...

  4. 浅谈Java虚拟机内存中的对象创建,内存布局,访问定位

    参考于 深入理解Java虚拟机 这里介绍HotSpot虚拟机(自带的虚拟机) 1.对象的创建 对于程序员来说,创建对象的方法: User user1 = new User(); User user2 ...

  5. 【JVM第六篇--对象】对象的实例化、内存布局和访问定位

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.对象的实例化 在平常写代码的过程中,我们用class关键字定义的类只是一个类的模 ...

  6. Java对象的创建、内存布局和访问定位

    在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...

  7. 关于Java的对象,锁和对象的内存布局、访问定位

    1. 对象的创建和分配 创建对象(如克隆.反序列化)通常仅仅一个new关键字,但在虚拟机中,对象的创建的过程需要如下步骤: 类加载检查 先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并 ...

  8. 【深入理解JVM】:Java对象的创建、内存布局、访问定位

    对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查.对象分配内存.并发处理.内存空间初始化.对象设置.执行ini方法等. 主要流 ...

  9. JVM中对象的内存布局与访问定位

      一.对象的内存布局 已主流的HotSpot虚拟机来说,   在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填 ...

随机推荐

  1. GUI实现超简单的计算器

    计算器样式 实现代码 //实现超简易的计算器 public class Test02 { public static void main(String[] args) { Counter counte ...

  2. GUI容器之Panel

    Panel //panel可以看成是一个空间,但不能单独存在 public class MyPanel { public static void main(String[] args) { Frame ...

  3. volatile的基本原理

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  4. Python__Xpath模块

    import requests from lxml import etree # 导入xpath headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6 ...

  5. ☕【JVM技术指南】「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【下部】

    承接上文 (完结撒花1-52系列)[JVM技术指南]「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"[上部] 并行收集器 并行收集器(也称为吞吐量收集器)是类似 ...

  6. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...

  7. DebugView端游日志查看工具

    端游日志工具 端游开发的同学可以通过DebugView - Windows Sysinternals | Microsoft Docs来查看游戏打印的log,它允许你监控本地系统上的debug pri ...

  8. mysql更新数据时:当想mysql某插入有某字段设置了unique且和之前相同时,会报错,并停止运行

    这个在mysql5.7会报错: 如openid设为unique: 1062 - Duplicate entry 'oTfYq6PKne00IrcTqphmKqKnsahM' for key 'qx_w ...

  9. Shell系列(2)- 脚本执行方式

    创建shell脚本 [root@localhost sh]# vim hello.sh  shell脚本必须用.sh,同时方便文件管理 #!/bin/bash:shell文件第一行必须是这个,声明这个 ...

  10. LeetCode2-链表两数和

    目录 LeetCode2-链表两数和 题目描述 示例提示 经验教训 参考正解 题目描述 示例提示 经验教训 链表题的判空条件不是万能的,有时候示例会极其复杂,根本难以通过判空来区分不同情况. /** ...