`

面试总结----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常见问题总结【面试必问】

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释执行字节码并管理内存。本篇文章将深入探讨JVM的一些常见问题,这些内容对于理解和优化Java应用程序至关重要,同时也是面试中的高频考察点。 一、JVM内存...

    java面试总结文档

    ### Java面试总结文档知识点解析 #### 一、Java基础篇 - 概念 ##### 1. Linux概述 - **起源与发展**:Linux是由芬兰学生Linus Torvalds于1991年开始创建的一个开源操作系统内核。随着社区的不断发展与完善,Linux...

    100IT名企java面试必考面试题.PDF

    4. **JVM**:Java虚拟机(JVM)的理解是高级Java面试的重要部分。面试中可能会涉及类加载机制、内存模型(如栈、堆、方法区)、JVM优化等。 5. **多线程**:Java提供了丰富的多线程支持,面试官会关注同步与异步、...

    面试---1. Java&设计模式.pdf

    - **JVM**: Java Virtual Machine,Java虚拟机,是执行Java字节码的虚拟机环境。它提供了高级语言与底层硬件之间的桥梁,使得Java程序能够跨平台运行。 **关系**: - JDK包含JRE和Java开发工具。 - JRE包含JVM和...

    10万字面试总结Java.pdf

    这份"10万字面试总结Java.pdf"涵盖了Java基础知识、JVM、Spring框架、并发编程、Linux、Dubbo、Mybatis、Springcloud、Spring Boot、消息队列和Zookeeper等多个核心主题,旨在帮助Java开发者全面准备面试。...

    面试知识点总结--JAVA测试题.pdf

    Java 实现跨平台的基石在于Java虚拟机(JVM)。Java 源代码被编译成字节码(.class 文件),这种字节码是平台无关的,可以在任何安装了JVM的系统上运行。JVM会加载字节码文件,进行校验、解析,然后在目标平台上解释...

    java面试题收集录--java面试没问题---来吧java对象

    6. **JVM**:理解Java虚拟机的工作原理,包括类加载机制(双亲委派模型)、内存区域(堆、栈、方法区、程序计数器、本地方法栈)、JVM调优参数等。 7. **IO/NIO/BIO**:输入输出流体系结构,缓冲区,转换流,以及...

    Java面试虚拟机篇+框架篇,这是我总结出来的Java面试中虚拟机和框架方面的面试题,非常全面,希望大家喜欢

    Java面试虚拟机篇+框架篇,这是我总结出来的Java面试中虚拟机和框架方面的面试题,非常全面,希望大家喜欢

    java面试题-外企软件工程师面试题大全.rar

    2. **JVM原理**:外企工程师面试中,JVM(Java虚拟机)是必考项,包括垃圾回收机制、类加载机制、内存模型(堆、栈、方法区)等,了解这些有助于优化程序性能。 3. **多线程与并发**:Java的并发处理能力是其强大之...

    Java面试题-完整版.pdf

    + RuntimeException:是运行时异常,运行时由Java虚拟机生成的例外,编译期不检查 + 场景:NullPointerException、 NumberFormatException、 IndexOutOfBoundsException、 ClassCastException、...

    Java最新面试总结.docx

    ### Java最新面试总结知识点 #### 一、面向对象分析(OOA) 面向对象分析(OOA)是在系统开发过程中的一个重要阶段,它基于系统业务调查资料,并采用面向对象的思想来进行分析工作。OOA的主要任务是从收集到的信息...

    80个it公司的java面试题目-个人总结.rar

    - **JVM(Java虚拟机)**:理解JVM的工作原理,包括类加载机制、内存模型和垃圾回收。 - **类与对象**:掌握面向对象编程的基本原则,如封装、继承和多态。 - **访问修饰符**:理解public、private、protected和...

    java面试大全。各大公司面试总结。知识点总结,共31个文档

    7. **JVM**:理解Java虚拟机的工作原理,包括类加载机制、运行时数据区(堆、栈、方法区、本地方法栈、程序计数器)以及JVM调优。 8. **反射**:学习如何在运行时动态获取类的信息,创建对象,调用方法,以及使用...

    Java多线程-知识点梳理和总结-超详细-面试知识点.docx

    Java内存模型(Java Memory Model)是Java虚拟机(JVM)中的一种内存模型,用于描述Java程序中变量的存储和访问规则。Java内存模型定义了变量的存储位置、变量的生命周期和变量的访问规则等。 Happens-Before ...

    2020年最新版--Java+最常见的+200++面试题汇总+答案总结汇总.pdf

    JRE则仅仅是Java的运行环境,提供了Java虚拟机以及核心类库等运行Java程序所需的组件。JDK是需要给开发者安装的,因为它包含了开发和运行Java程序所需的全部工具;而用户只需安装JRE来运行Java程序。 接着,文章中...

    最新Java面试题及答案(Java基础、设计模式、Java虚拟机(jvm))

    - **平台独立性**:通过Java虚拟机(JVM),Java程序可以在不同的操作系统上运行,无需修改代码。 **1.2 JDK、JRE和JVM的区别** - **JDK (Java Development Kit)**:这是Java开发工具包,包含了编译、调试和运行...

    java经典面试题汇总(精华版).pdf

    - **定义**:Java 虚拟机,是运行 Java 字节码的虚拟机,它提供了运行时环境的核心服务,如垃圾回收、异常处理等。 - **用途**:用于执行 Java 字节码。 #### 四、`==` 与 `equals()` 方法的区别 1. **`==` 操作...

    迅雷java高级程序员-面试归来-2010-05-21

    5. **Java虚拟机(JVM)原理** - **内存管理**:了解JVM如何分配和回收内存是提高程序性能的关键。 - **垃圾回收机制**:掌握垃圾回收的工作原理可以帮助开发者更好地优化内存使用。 6. **数据库连接池** - ...

    10万字总结java面试题和答案(1).pdf

    * 与平台无关性:Java虚拟机(JVM)使得Java语言可以跨平台使用,无需考虑不同的操作系统和硬件架构。 * 可靠安全:Java语言具有可靠安全的特性,避免了许多编程语言中的常见错误和漏洞。 * 支持多线程:Java语言...

Global site tag (gtag.js) - Google Analytics