为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第10天+JVM原理篇基础

标签:
Java

课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

课程章节:第6章 JVM原理篇

主讲老师:求老仙

课程内容:

第6章 JVM原理篇

课程收获:

问题1)堆和栈的区别?

1,数据结构角度:

栈:是一种先入后出的结构

堆:狭义上,堆是一棵有序的树

2,从程序执行的角度:

**栈:**存储程序执行时的临时数据

堆:是存储数据用的,广泛的堆,是任何的数据结构,只要是存储对象的数据的都可以称为堆

3,栈上也可以分配对象,当对象声明到方法内部的时候,就是逃逸分析,会将对象创建到栈上(因为编译器知道,当前对象,会在方法结束的时候销毁,所以会声明到栈上)

4,每个线程都有自己的栈和程序指针,可以没有堆

总结:堆是一颗有序的树,但是在jvm中,堆是用来存储应用的数据,用来分配和回收的

栈是先入后出的一种数据结构,是用来存放线程的临时数据用的。

问题2)讲讲jvm的内存布局?

1,分为堆和栈,其中对象实例数据是gc 堆,方法区是非gc堆,本地的方法都是在堆中,也是非gc堆


2,从线程的角度:线程是cpu的执行单位,所以每个线程中都包含有程序计数器,用来指向下一条指令

  1. 运行时的状态

当面试官完的时候,从两个角度解释一下:

  1. 从运行时的结构看,分为堆和栈,堆是线程共享的,栈是线程独享的,堆主要分成了方法区和对象堆,是垃圾回收的主要对象,栈主要包含虚拟机栈和本地方法栈,每个线程又包含栈和程序计数器,栈的主要是运行时保持临时数据和程序,程序计数器指向下一条jvm的指令,栈中主要包含,局部变量表,方法返回地址等

  2. jvm的结构划分看,分为5部分,方法区,堆,虚拟机栈,本地方法栈,程序计数器

方法区(线程共享)

被所有方法线程共享的一块内存区域。

用于存储已经被虚拟机加载的类信息,常量,静态变量等。

这个区域的内存回收目标主要针对常量池的回收和堆类型的卸载

问题3)说说stw,吞吐量,FootPrint和Latency?设置gc的3个指标,gc所用时间,stw所用时间,footPrint一次stw前应用对内存的需求

  1. 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吞吐量。

扩大内存也可以提高吞吐量

  1. latency延迟:gc造成的停顿时间,也就是一次stw的时间

3,footPrint:一次stw前应用对内存的需求,footPrint是一个峰值,是在stw前没有被回收的内存值

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消