课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机
课程章节:第6章 JVM原理篇
主讲老师:求老仙
课程内容:
第6章 JVM原理篇
课程收获:
问题1)堆和栈的区别?
1,数据结构角度:
栈:是一种先入后出的结构
堆:狭义上,堆是一棵有序的树
2,从程序执行的角度:
**栈:**存储程序执行时的临时数据
堆:是存储数据用的,广泛的堆,是任何的数据结构,只要是存储对象的数据的都可以称为堆
3,栈上也可以分配对象,当对象声明到方法内部的时候,就是逃逸分析,会将对象创建到栈上(因为编译器知道,当前对象,会在方法结束的时候销毁,所以会声明到栈上)
4,每个线程都有自己的栈和程序指针,可以没有堆
总结:堆是一颗有序的树,但是在jvm中,堆是用来存储应用的数据,用来分配和回收的
栈是先入后出的一种数据结构,是用来存放线程的临时数据用的。
问题2)讲讲jvm的内存布局?
1,分为堆和栈,其中对象实例数据是gc 堆,方法区是非gc堆,本地的方法都是在堆中,也是非gc堆
2,从线程的角度:线程是cpu的执行单位,所以每个线程中都包含有程序计数器,用来指向下一条指令
- 运行时的状态
当面试官完的时候,从两个角度解释一下:
-
从运行时的结构看,分为堆和栈,堆是线程共享的,栈是线程独享的,堆主要分成了方法区和对象堆,是垃圾回收的主要对象,栈主要包含虚拟机栈和本地方法栈,每个线程又包含栈和程序计数器,栈的主要是运行时保持临时数据和程序,程序计数器指向下一条jvm的指令,栈中主要包含,局部变量表,方法返回地址等
-
从jvm的结构划分看,分为5部分,方法区,堆,虚拟机栈,本地方法栈,程序计数器
方法区(线程共享)
被所有方法线程共享的一块内存区域。
用于存储已经被虚拟机加载的类信息,常量,静态变量等。
这个区域的内存回收目标主要针对常量池的回收和堆类型的卸载
问题3)说说stw,吞吐量,FootPrint和Latency?设置gc的3个指标,gc所用时间,stw所用时间,footPrint一次stw前应用对内存的需求
- STW:stop of word,如果gc不过来的时候,产生的垃圾比回收的快,就会stw,
Gc的指标3个:
2,Gc的指标,吞吐量(throughtPut):单位时间内程序工作时间和gc的时间比例。
设置吞吐量的,GcTimeRatio=99 默认是99,gc永远只占1份,如果设置成19,就是
19:1,如果设置成24,就是24:1,gc只占用一份。
如何提高gc吞吐量,多线程可以吗?多线程不能提高吞吐量,只有在io阻塞,或者cpu闲置的时候,多线程才能提高gc吞吐量。
扩大内存也可以提高吞吐量
- latency延迟:gc造成的停顿时间,也就是一次stw的时间
3,footPrint:一次stw前应用对内存的需求,footPrint是一个峰值,是在stw前没有被回收的内存值
共同学习,写下你的评论
评论加载中...
作者其他优质文章