`

面试总结----java虚拟机

    博客分类:
  • java
 
阅读更多
在面试过程中,java虚拟机被问到的概率非常大,应该是每场面试必问的问题。

下面从JVM内存结构、垃圾收集、常见异常、参数设置等四个方面来总结java虚拟机。

1、JVM内存结构.
从两个层面划分,第一个层面划分具体如下图所示:
 


a.程序计数器,即记录每个线程执行的字节码的行号,为线程切换时返回或退出提供服务。
b.java虚拟机栈,保存方法中的局部变量表、操作数栈等信息。
c.native方法栈,为native方法提供服务。
d.堆,存储对象或者数组。垃圾收集的主要区域。
e.方法区,保存类信息(魔数、主次版本号等)、常量、静态变量等。包含运行时常量池,包含符号引用等信息。

  第二个层面划分如下图所示:
 

  a.Young,即为年轻代,新生对象一般都是在这个区域,因为这个区域中的对象很年轻,因此称此区域为年轻代。这个区域可细分为Eden区,s0和s1区,s即为survivor,对象一般在Eden区域产生,垃圾回收时,在s0和s1中来回复制。
  b.Old区,存放老对象和大对象。对象在Young中产生后,经过指定次数的垃圾回收后仍然幸存,则这个对象会被移动到Old区域,如果新产生的对象较大,在Young区域中存放不下,则直接存放在Old区域。
  c.Perm区域存放类信息,String.intern()方法产生的常量等。
一般情况下,Old区域必Young区域大很多,Eden与s0或s1的比例为8。

2、垃圾回收
  java虚拟机采用分代垃圾回收机制来回收垃圾。java对象有一个特点,大多数对象会在很短的时间内死亡,之后很少一部分对象会在长时间内存活。因此,针对Young区域和Old区域采取不用的垃圾回收机制和算法。垃圾回收的前提是对象已经死亡,怎么判断对象死亡呢,这里采用根搜索算法(而不是引用计数算法),能作为根的对象有四种:
  a.java虚拟机栈中引用的对象
  b.方法区中类静态属性引用的对象
  c.方法区中常量引用的对象
  d.本地方法栈中引用的对象
不能喝上述四种对象产生关联的对象都会在垃圾回收的时候被回收掉,垃圾回收的被动触发的,而不是主动执行的。
  Young区中的对象死亡的概率很大,而Old区域的对象不容易死亡,因此针对这两个区域的,产生了不同的垃圾回收算法:复制-清除(Young区)、标记-整理、标记-清除(Old区),这里有单线程、多线程并发的垃圾回收算法实现,G1垃圾回收算法为将JVM内存区分为大小相等的若干区域,在指定时间内,回收垃圾最多的区域。

3、常见异常
   除了程序计数器区域外,其他部分都会产生异常,主要分为OOM(OutOfMemoryError)、StackOverFlowError。OOM为无法申请到足够的内存空间时,抛出的错误,StackOverFlowError为方法访问时,方法调用深度超出虚拟机允许的最大深度时抛出的错误。
解决这两个问题,可以设置内存大小和栈深度来解决。

4、参数设置
   a.-Xms和-Xmx来设置堆的最小最大值,一般设置为相等,防止堆抖动。
   b.-Xmn来设置Young区域的大小,-XX:SurvivorRatio来设置Eden与S0或S1的比率,-XXInitialSurvivorRatio来设置Young与S0或S1的比率。
   c.-XX:MaxPermSize和-XX:PermSize来设置Perm区域的最大和最小值。

这里只是总结了java虚拟机中的极小部分知识。

关于java虚拟机的知识,推荐《深入理解java虚拟机:JVM高级特性与最佳实践》(周志明)



  • 大小: 15.1 KB
  • 大小: 6 KB
分享到:
评论

相关推荐

    Java面试题资料合集-44套.rar

    java面试-Java虚拟机(JVM)面试题 51道 java面试-Kafka知识汇总 18道 java面试-Nginx面试题 23道 java面试-RabbitMQ面试题 22道 java面试-Redis面试题(含答案) java面试-SpringBoot面试题 30道 java面试-Spring...

    2015-09-12-Java虚拟机详解----JVM常见问题总结【面试必问】

    2015-09-12-Java虚拟机详解----JVM常见问题总结。 博客链接:http://www.cnblogs.com/smyhvae/p/4810168.html

    Java 虚拟机面试题全面解析(干货)

    Java 虚拟机面试题全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~

    JAVA虚拟机内存相关面试题,阿里,百度,电信,都有过学员面到过,好好加油

    最近我发布了很多面试题,好多人评论说能不能多发发这种面试题。我想告诉你们的是,总结一份面试题,必须是要有高质量的,不是说发就能发的,需要时间总结!! 希望对你们有帮助 ,好好加油,相信自己!!!!

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!)

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!) 文章目录Java内存模型我们开发人员编写的Java代码是怎么让电脑认识的为什么说java是跨平台语言Jdk和Jre和JVM的区别说一下 JVM由那些部分组成,运行流程是什么...

    知识星球JavaGuide面试大全

    知识星球JavaGuide面试大全,包括大厂面试题,万字总结java面试题和答案(1),Java多线程,Java基础,java虚拟机,北京-百度-Java中级,北京-京东-Java中级,操作系统,杭州-阿里云-Java中级,计算机网络,数据结构与算法,数据库...

    蚂蚁课堂(每特学院)第一期-Java高端培训视频教程

    0022--SpringCloud.zip ├─0023--Zookeeper实战分布式锁.zip ├─0024--Dubbo.zip ├─0025--分布式定时job-xxljob.zip ├─0026--深入理解Java虚拟机.zip ├─0027--垃圾回收机制算法.zip ├─0028--MySQL优化入门...

    互联网Java面试训练营.rar

    8. Java基础知识面试题(总结最全面的面试题) 9. Java集合总结【面试题+脑图】,将知识点一网打尽! 10. 2万字Java并发编程面试题合集(含答案,建议收藏) 11. Java并发面试,幸亏有点道行,不然又被忽悠了 12...

    java面试题总结

    java常见面试题总结,并发,java虚拟机,数据结构等。

    java面试总结

    java面试总结,涵盖数据库,虚拟机,框架,http等内容

    JVM面试总结

    而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽...

    Java虚拟机JVM性能优化(一):JVM知识总结

    Java虚拟机JVM性能优化(一):JVM知识总结

    Java 面试知识点总结.pdf

    Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java 虚拟机中的 int 数据类 型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素 boolean 元素占 8 位”。这样我们可以得出 boolean ...

    Java后端面试知识点总结

    Java后端面试知识点总结 数据库 mysql redis java java虚拟机 java并发 java容器 java基础 计算机网络 数据结构与算法 操作系统/Linux 设计模式 场景题和设计题 流行框架

    阿里大佬总结的Java面试资料.pdf

    而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下: ① Java 源文件—->编译器—->字节码文件 ② 字节码文件—->JVM—->机器码 每一种平台的解释器是不同的,但是实现的虚拟机是...

    Java虚拟机(JVM)小白必入.xmind

    此文件为XMID思维导图文件,是个人学习期间总结的Java虚拟机总总结,可以作为面试的一个亮点,反正面试的时候这是我的一个加分项

Global site tag (gtag.js) - Google Analytics