jvm内存模型和jvm相关

1.JVM的内存机构是怎样的

答:有5个部分,其中分线程共享的和线程独占的,线程共享的有堆和元区间,元区间是从jdk1.8开始从之前的在堆里面的方法区分出来了,线程独占的有分为栈,本地方法栈,和pc寄存器。

堆是用来存放new 出来的对象

元区间存放,class对象,静态属性,常量池,

本地方法栈,native修饰的方法

pc寄存器,程序执行的位置

栈,局部变量

2,栈帧的内部组成

栈里面由一个个栈帧组成,一个方法就是一个栈帧,栈帧里面又由局部变量表,操作数栈,(临时存放数据或者计算过一下就走),动态链接,返回地址组成

符号引用和直接引用在运行时进行解析和链接的过程,叫动态链接。

  • 一个方法调用另一个方法,或者一个类使用另一个类的成员变量时,
    • 需要知道其名字
  • 符号引用就相当于名字,
  • 这些被调用者的名字就存放在Java字节码文件里(.class 文件)。
  • 名字是知道了,但是Java真正运行起来的时候,如何靠这个名字(符号引用)找到相应的类和方法

  • 需要解析成相应的直接引用,利用直接引用来准确地找到。

动态返回地址(return address)

  • 存放该调用方法的pc寄存器的值
  • 一个方法的结束,有两种方式
    • 遇到return,将返回值传递给上层方法调用者,简称正常完成出口(返回指令包括ireturn(返回值为boolean,byte,char,short,int),lreturn,freturn,dreturn,以及areturn,还有return 返回为void、实例初始化方法,类和接口的初始化方法)
    • 异常完成出口,即碰到了异常,并且没有在方法内进行处理,就会退出方法。方法在执行过程总抛出异常时的异常处理,储存在一个异常处理表,方法在发生异常时候找到处理异常的代码
  • 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址,而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息
  • 本质上,方法的退出就是当前栈帧出栈的过程,此时,需要恢复上层方法的数据区等信息,让调用者方法继续执行下去
  • 正常完成出口和异常完成出口的区别在于,通过异常完成出口推出的不会给他的上层调用者产生任何的返回值

3,javap -c 地址 反编译.class为汇编指令

4.方法区,字符串常量池,常量池

常见的相关面试题:

 考点常量池的大小

 Java中八种基本类型的包装类的大部分都实现了常量池技术,它们是Byte、Short、Integer、Long、Character、Boolean,另外两种浮点数类型的包装类(Float、Double)则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值在-128到127时才可使用对象池。

字符串常量池不在方法区,在堆外内存,,而运行时常量池还是在方法区。

4.对象创建过程

new 关键字 先找到对象class,没有就先加载出来(双亲委派机制)有父类先加载父类,加载当前对象class,为当前对象开辟空间,初始化对象内的属性,执行构造方法(可以给属性赋值) 多线程并发的情况下 ,执行构造方法和初始化赋值会乱序,所以需要加上volatile关键字修饰对象,然后加上双重检验锁可以提高很多性能

5,jvm如何为对象开辟空间

有指针碰撞和空闲区间,指针碰撞和空闲区间在并发情况下都是采用CAS解决,哪总方法取决于jvm的算法方法标记整理属于指针碰撞,标记清除是空闲区间

6.jvm栈上分配

一个栈帧方法中new了一个对象只在这个方法中用到并且这个对象比较小就直接在栈上创建了叫做栈上分配,如果有别的对象对方法中new出来的对象有引用叫做方法逃逸

7.jvm对象组成部分

对象头,实例数据,对齐填充(以8个字节的倍数进行填充),默认开启指针压缩,一个空对象对象头为8+8=16字节,这个是64位系统

8.对象的引用方式

有直接引用和,句柄引用,这个和用的jvm有关,阿里的好像就是句柄,oracle就是直接引用,各自有优点,直接引用取值效率高

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值