Java虚拟机是如何判定热点代码的?
Java虚拟机判定热点代码的方式有两种:
基于采样的热点判定:主要是虚拟机会周期性的检查各个线程的栈顶,若某个或某些方法经常出现在栈顶,那这个方法就是“热点方法”。这种判定方式的优点是实现简单;缺点是很难精确一个方法的热度,容易受到线程阻塞或外界因素的影响。
基于计数器的热点判定:主要就是虚拟机给每一个方法甚至代码块建立了一个计数器,统计方法的执行次数,超过一定的阀值则标记为此方法为热点方法。
Hotspot虚拟机使用的基于计数器的热点探测方法。它使用了两类计数器:方法调用计数器和回边计数器,当到达一定的阀值是就会触发JIT编译。
方法调用计数器:在client模式下的阀值是1500次,Server是10000次,可以通过虚拟机参数:-XX:CompileThreshold=N对其进行设置。但是JVM还存在热度衰减,时间段内调用方法的次数较少,计数器就减小。回边计数器:主要统计的是方法中循环体代码执行的次数。
以下Integer代码输出的结果是?
答:true,false题目解析:此道题目考察的是,面试者对于基础类型高频区缓存的掌握,因为Integer的高频区的取值是-128-127,所以在这个区间的值会复用已有的缓存,对比的结果自然是true,false。
有哪些方法可以解决哈希冲突?
答:哈希冲突的常用解决方案有以下4种:
开放定址法:当关键字的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,循环此过程直到找出一个不冲突的哈希地址,将相应元素存入其中;
再哈希法:这种方法是同时构造多个不同的哈希函数,当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key),循环此过程直到找到一个不冲突的哈希地址,这种方法唯一的缺点就是增加了计算时间;
链地址法:这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况;
建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。
JVM内存布局是怎样的?
答:不同虚拟机实现可能略微有所不同,但都会遵从Java虚拟机规范,Java8虚拟机规范规定,Java虚拟机所管理的内存将会包括以下几个区域:
程序计数器(ProgramCounterRegister)
Java虚拟机栈(JavaVirtualMachineStacks)
本地方法栈(NativeMethodStack)
Java堆(JavaHeap)
方法区(MethedArea)
以下StringBuffer传值修改后的执行结果是什么?
答:hilaowang题目解析:String为不可变类型,在方法内对String修改的时候,相当修改传递过来的是一个String副本,所以String本身的值是不会被修改的,而StringBuffer为可变类型,传递过来的参数相当于对象本身,所以打印的结果就为hilaowang。
以上就是极悦java培训机构的小编针对“2020年精选Java面试题目”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习