JVM第二章基础

C#和java几乎一样,但是C#更安全

HotSpot含有两个即时编译器,一个是编译耗时短但输出代码优化程度较低的客户端编译

器(简称为C1)以及编译耗时长但输出代码优化质量也更高的服务端编译器(简称为C2),通常它们

会在分层编译机制下与解释器互相配合来共同构成HotSpot虚拟机的执行子系统。Graal编译器是以C2编译器替代者的身份登场的。C2维护太过复杂

Graal的优势

Graal能够做比C2更加复杂的优化,如“部分逃逸分析”(Partial

Escape Analysis),也拥有比C2更容易使用激进预测性优化(Aggressive Speculative Optimization)的

策略,支持自定义的预测性假设等

【重点面试区】

分为哪些部分,哪些是线程共享,哪些是线程隔离,都要记下来。

方法区:类第一次使用从磁盘进入内存先进入方法区。

虚拟机栈:方法的执行创建线程,变量句柄等等放在栈里面

堆:创建对象在堆中,创建进程在虚拟机栈中。

本地方法栈:java的最终执行还是要翻译成操作系统自带的一些方法,最终调用的还是操作系统的方法(操作系统的内核,操作系统的方法)

计数器:虚拟机进入线程的时候记录什么时候入栈,什么时候出栈,由计数器进行记录。

线程共享:

多个线程可以调用一个“方法区”;包含:方法区,堆,执行引擎,本地库接口

线程隔离:

同样一个数据,不同的线程不能访问,A线程访问某个信息的时候,B,C线程不能访问;包含:虚拟机栈,本地方法栈,程序计数器

程序计数器:

辅助线程栈,程序执行什么时候进入if,什么时候进入whtile,配合程序执行

java虚拟机栈:

是线程私有的,他的生命周期与线程相同;每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程;HotSpot虚拟机的栈容量是不可以动态扩展的;

ps:方法就是栈帧

栈帧:用于存储局部变量表、操作数栈、动态连接、方法出口等信息。

方法出口:出栈;动态连接:不同线程的方法被谁调用;

【面试题】

1.基本类型存在于哪儿?

在方法里面声明的,存在于栈中;在类中,在方法外声明的,被使用时,只能被new出来存在于堆中;静态的基本类型存在于方法区中。

2.两个异常

StackOverflowErroe:栈溢出,单个的栈空间满了,没办法入栈---递归的情况容易出现这种情况

OutOfMemoryError:内存溢出----内存不够了,就会溢出,指的是整个栈的内存,或者整个堆的内存

java堆:所有的对象实例以及数组都应当在堆上分配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值