Java面试题系列——JavaSE面试题(JVM一)

1、请说下Java的内存模型,也就是JMM

Java内存模型(JMM):JVM规范中定义了Java的内存模型(Java Memory Model,JMM),

JMM主要分为2个部分:主内存以及每个线程的本地内存。

JVM中运行的每个线程都拥有自己的线程栈,线程栈包含了当前线程执行的方法调用相关信息,我们也把它称作调用栈。随着代码的不断执行,调用栈会不断变化共享的对象我们会放置在堆中!

现在的电脑,一般都是多CPU的。那么多个CPU如何操作内存呢?

 现代计算机一般都有2个以上CPU,而且每个CPU还有可能包含多个核心。因此,如果我们的应用是多线程的话,这些线程可能会在各个CPU核心中并行运行。

在CPU内部有一组CPU寄存器,也就是CPU的储存器。CPU操作寄存器的速度要比操作计算机主存快的多。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CPU寄存器。某些CPU可能还有多个缓存层(一级缓存和二级缓存)。计算机的主存也称作RAM,所有的CPU都能够访问主存,而且主存比上面提到的缓存和寄存器大很多。

当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存,进而在读取CPU缓存到寄存器。当CPU需要写数据到主存时,同样会先flush寄存器到CPU缓存,然后再在某些节点把缓存数据flush到主存。

2、请说下JVM的运行时的内存结构

JDK1.8以前:

JDK1.8以后:

JDK1.8中,移除了方法区的概念,将类的类信息等元数据使用元数据区(或者叫:元空间)来进行存储。

但是程序计数器,本地方法栈,线程栈这3个部分,依旧是线程所独有!堆,元空间还是被线程所共享!

3、JVM虚拟机的原理?

JVM虚拟机就是一台虚拟的机器。同样是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box、Vmware就属于系统虚拟机,他们完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台。
 程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们成为Java自己码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。目前Java使用最广泛的是HotSpot虚拟机。

4、什么是虚拟机参数配置?你是否配置过?在哪里配置?

虚拟机参数配置,其实就是围绕着堆、栈、方法区的内存空间大小进行配置。其目的:就是为了更高效,更合理的利用虚拟机,减少FullGC的次数,提升内存的利用率。配置方式多种:可在tomcat的bin目录下的catalina.bat中配置,也可以在开发工具中配置。

5、都有哪些堆的参数,可以配置?

-XX:+PrintGC                    每次触发GC的时候打印相关日志
-XX:+UseSerialGC            串行回收
-XX:+PrintGCDetails         更详细的GC日志
-Xms                                 堆初始值
-Xmx                                 堆最大可用值
-Xmn                                 新生代堆最大可用值
-XX:SurvivorRatio             用来设置新生代中eden空间和from/to空间的比例.

总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。

6、如何设置最大堆空间大小?

配置参数: -Xms20m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags。

持续更新中,敬请期待!

参考文章:

java虚拟机在哪配置参数,Java虚拟机内存配置与参数说明_Enterance的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海海不怕困难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值