问题1:解释一下对象的创建过程(半初始化)。

申请一块内存,给它赋值默认值(8大类型都有自己的默认值,此时为半初始化状态),然后调用构造方法,赋初始值,然后建立关联

线程上锁

需要两遍检查,DCL= double check lock,开始的时候判断是否为空,加锁,进去后再判断实例是否为空,然后再进行执行,检查两遍。

Volatile :保持线程可见性,禁止指令重排序(谁先请求的,就先返回谁,然后再进行下一个指令。),

问题2:DCL单例到底需不需要volatile?(指令重排)

如果没有禁止指令重排,第一个线程来了会进行版初始化状态,让t不为空,第二个线程来了判断t不为空,直接使用半初始化状态的值,出现不同的异常状态。因此要加上volatile,禁止指令重排序(对内存区域加了volatile,对这个内存限制)。[订单更新的时候会有更新]

问题3:对象在内存中的存储布局(对象与数组的存储不同)

普通对象和数组不同。

普通对象有四项:占用16个字节

markword(标记用,放锁状态年龄 hashcode等)、 8个字节

类型指针classpointer(指向属于哪个类型 a.class)、4个字节

实例数据instance data(存放实例数据int a = new int[0],存放a)、

对齐padding(前面三个内容的位数不是8的倍数(读一块内容的时候,整块读最快),则补上) 4个字节,

JOL能将能将对象打印出来,打印布局。

数组对象有5项:

markword(标记用,放锁状态年龄 hashcode等)、 8个字节

类型指针classpointer(指向属于哪个类型 a.class)、4个字节

数组长度

实例数据instance data(存放实例数据int a = new int[0],存放a)、

对齐padding(前面三个内容的位数不是8的倍数(读一块内容的时候,整块读最快),则补上) 4个字节,

问题4:对象头具体包括什么(markword classpointersynchronized锁信息)

最主要的内容:锁的信息。有一个锁升级的过程。

New--- 偏向锁——自旋锁(无锁 lock-free 轻量级锁)— 重量级锁

偏向锁:贴标签

自旋锁:取消偏向锁,多个线程进行CAS竞争(先读出来,然后修改,再回去对比一下,如果值还是原来的,则贴上标签,加锁成功。),   ABA问题,加个版本。自旋次数超过ncpu内存的一半,在jvm中进行抢占,则升级为重量级锁。

重量级锁:将线程放到队列里面,按照顺序执行

问题5:对象怎么定位(直接、间接)

在JVM中怎么指向对象。

1.句柄两次引用,效率低,唯一好处:垃圾回收的比较方便。

T在堆中通过实例数据指针倒找对象,通过类型数据指针在方法区找到t.class。

2.直接指针,平时常用

T指向堆中的类型数据指针,在方法区中找到t.class.

问题6:对象怎么分配(栈上-线程本地-Eden-Old)

Start — new (优先在栈上分配,栈上分配的好处:方法没了之后,栈及没有了,不需要对栈内存进行gc回收。需要满足1.逃逸分析,2.标量替换。)—- 栈上空间够用,直接end,如果不够用,如果很大,看看老年代,可能会fullgec;如果不大,线程本次分配TLAB,年轻代分配里面分配内存,

栈上比堆上快一倍。(java 优化,参照c语言的struct,struck在栈上分配)

1.栈上分配:不会有逸出,没有别的线程访问(没有别的方法使用)。直接使用成员两边替换这个对象。满足以上两个条件则可以进行栈上分配。

e.g. User对象,有两个成员变量 id 和name,小内容的东西直接放在栈上,别的方法不会调用这个user对象;直接使用id和name代替user对象,直接放到栈上。

Gc回收一次,年龄加一,到达一定年龄则进行回收。age是4位,最大表示15.

问题7:object o = new object() 在内存中占用多少字节

普通对象指针 o 占用4个字节,正常占用8个字节,但是开启了压缩,所以是4个。

Object对象占用:16字节,如果有压缩的话,padding是4,如果没有压缩的话,padding是0,指针占用8个字节了。默认压缩。

4字节寻址的最大空间:指向的最大数字2**4*8-1,32g

堆内存超过一定值,访问不到所有对象,压缩自动不起作用了,就算你自己扩展内存为48个g,结果发现对象跟32g一样,内存自动膨胀了。

【JAVA】美团面试七连问相关推荐

  1. Java中面试官常问问题

    Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylis ...

  2. setnx是原子操作吗_Redis面试七连问,你能扛得住吗?

    1.使用redis有哪些好处? 速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型:支持string,list,set,so ...

  3. java开发面试中经常问到的问题(2019年5月)

    1.jsp内置对象有哪些? * 在jsp页面中不需要创建,直接使用的对象         * 一共有9个:                 变量名                    真实类型    ...

  4. 美团科技 Java工程师_美团网java工程师面试都会问哪些问题?

    美团网java工程师面试主要考察面试者的专业知识,涉及TCP/IP 线程.synHashMap底层.进程关系.servlet生命周期.pringMVC单例异常.Object方法.ConcurrentH ...

  5. 美团Java实习面试经历(拿到Offer)

    美团我是在拉勾网上投的简历,之前也投过一次,简历都没通过删选,后来让学姐帮我改了一下简历,重新投另一个部门,获得了面试机会.10月23日中午HR打电话过来预约了下午4点半面试,说会在线写代码,让我准备 ...

  6. Java程序员从阿里、京东、美团面试回来,这些面试题你会吗?

    前言 作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能.然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 ...

  7. java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会

    上周我投递出了简历,岗位是java后端开发工程师.这周美团面试官给我进行了面试,面试过程中他问了Java的反射原理.(不得不夸一句,美团的效率真高,上午面完一面,晚上二面马上安排上了.) 无论什么Ja ...

  8. cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?

    本文的阅读有一定的门槛,请先了解 GC 的基本知识. 现代垃圾收集器的演进大部分都是往减少停顿方向发展. 像 CMS 就是分离出一些阶段使得应用线程可以和垃圾回收线程并发,当然还有利用回收线程的并行来 ...

  9. 冒泡排序java代码_美团面试,我竟然输给了冒泡排序。。。

    前一阵子有个读者在微信里跟我聊了一件很有趣的事情,他去美团实习,面试让他哭笑不得,因为败在了冒泡排序上. 情况是这样子的,当时和面试官聊的感觉还可以,就在他觉得好像差不多快结束的时候,面试官给他扔了个 ...

最新文章

  1. 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
  2. iOS之runtime详解api(三)
  3. redis linux 文件位置,Linux下Redis的安装和部署
  4. php 下拉菜单 搜索,DedeCMS实现百度搜索下拉菜单提示信息功能
  5. 异动分析技术解决方案—异动归因之指标拆解
  6. grub rescue修复
  7. 【ARM 】CMSIS
  8. 【JS逆向系列】某服务器平台sm系列算法分析
  9. python视频补帧_视频补帧软件(DAIN APP)
  10. 关于geoserver中line图层线颜色不统一,style中sld写法
  11. 使用C# .net开发微信公众号之设置所属行业
  12. 杨绛:越是难熬的时候,人越要体面
  13. apache服务器wind 下载,安装及部署
  14. 温度补偿计算公式_温度补偿的方法
  15. Bowtie2的安装与使用
  16. 帅到没朋友 (20 分)
  17. ubuntu下网页快捷方式,chrome网页添加到桌面
  18. laravel一键生成模型、控制器、视图、表单验证类等等
  19. python扫描局域网端口和ip_python实现扫描局域网指定网段ip的方法
  20. vue3前端js通过navigator.serial直接连接地磅仪串口显示重量

热门文章

  1. phpword模板替换并导出
  2. 教师基本功大赛计算机试题及答案,信息技术教师基本功比赛笔试及答案
  3. appstore 审核ipv6被拒
  4. python的sort方法是哪种_python中的sort方法使用详解
  5. 自学编程该如何入手?
  6. 暑期实践Vue7.17
  7. iframe常见问题详解
  8. 中科院院士!211高校,迎来新校长
  9. 【每日英语】Wordle更新以后都在这里啦~
  10. 解析jsonarra_解析Json——操纵JsonArray