jvm常见面试题

本文详细介绍了Java虚拟机(JVM)的运行时数据区,包括线程私有的程序计数器、虚拟机栈和本地方法栈,以及线程共享的堆和方法区。在虚拟机栈中,每个方法对应一个栈帧,包含局部变量表、操作数栈、动态链接和出口。方法区则包含了运行时常量池等信息。此外,还讨论了Java对象的组成和栈上分配策略。

jvm 运行时数据区

1.线程私有

        1.1 程序计数器(pc寄存器)

                前提条件:线程只负责干活,不负责思考跟记录

                作用:当前线程正在执行的字节码的行号

        1.2 栈

                虚拟机栈   一个方法一个栈帧

                        1.局部变量表(存放方法中的局部变量)

                        2.操作数栈(变量运行过程中数据的中转)

                        3.动态链接(运行时的多态)

                        4.出口(出栈:正常/异常)

                        ......

                本地方法栈

                        带有native方法的,java给你提供的,c语言编写的

2.线程共享

        2.1 堆 - 对象的实例,字符串常量池从jdk1.7之后都是在堆里

        2.2 方法区(jdk1.8之前实现方式叫永久代,jdk1.8之后实现方式叫元空间)

                元空间在电脑内存中:

                        运行时常量池(class常量池,class文件在内存中运行,最终叫运行时常量池)

                                类的信息...

                                字面量:int a = "abc"; abc就是字面量

                                引用符号:引用关系

Java对象的组成

        对象头:gc的年龄,锁的指针,引用关系

        对象实例:

        数据填充:对象必须是8字节的倍数,不够就进行填充

栈上分配:

        是不是所有的对象实例都在堆中?不是

        方法逃逸:默认开启

        变量没有逃出方法的范围

        栈上分配,将一个对象拆分为基本数据类型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值