java企业级应用开发JVM常见题

请解释JVM内存模型,都包括哪几部分及其功能?

JVM 内存模型共分为虚拟机栈,堆,方法区,程序计数器,本地方法栈五个部分

1、PC寄存器(程序计数器)可看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条要执行的字节码指令,分支、 循环、 跳转、 异常处理等都依赖于它完成。每个线程有一个独立的程序计数器,线程之间互不影响。(是线程独立的)

2、Java虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候, Java虚拟机都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

3、本地方法栈与Java虚拟机栈作用非常相似,只不过他是为虚拟机使用本地方法而服务。 java虚拟机在调用本地方法(C/C++ 编写的本地方法)时,需要给本地方法提供一些內存空间 。

4、方法区是各个线程共享的内存区域,用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

5、堆是Java内存管理的核心区域,所有线程共享Java堆,“几乎”所有的对象实例都在这里分配内存。一个JVM实例只存在一个堆,JVM启动时堆即被创建。

**请简介JVM中对内存模型及其默认配置比例,通过哪些参数可以调整比例? **

默认情况下,堆的初始内存大小是物理内存的1/64,堆的最大内存大小是物理内存的1/4。

1、通过-Xms(-XX:InitialHeapSize):调整堆(新生代+老年代)的初始内存。

2、通过-Xmx(-XX:MaxHeapSize):调整堆(新生代+老年代)的最大内存。

3、-XX:NewSize和-Xmn(-XX:MaxNewSize):新生代的初始内存和新生代的最大内存。4、-XX:SurvivorRatio:新生代中1个Eden区与1个Survivor区的大小比值。5、-XX:NewRatio:指定老年代/新生代的堆内存比例。

**请简介JVM如何加载类,以及JVM实例化对象的步骤? **

类加载有五步:加载, 验证, 准备, 解析, 初始化。

1、加载:将class类加载到java虚拟机的内存里去, 在加载到内存之前, 会有一系列的操作。第一步是验证字节码。

2、验证:验证字节码加载是否正确, 格式是否正确. 内容是否符合java虚拟机的规范。

3、准备:在准备的过程中, 就会给变量赋初始值, 这个初始值并不是真实的值, 准备阶段赋的值是jvm固定的, 不是我们定义的值,这里只是给静态变量赋初始值 。

4、解析:将类、接口、字段和方法的符号引用转为直接引用;也就是得到类、字段、方法等在内存中的指针或者偏移量。

5、初始化:对类的静态变量初始化为指定的值. 执行静态代码块. 比如代码

实例化对象的步骤:

1、判断对象对应的类是否加载、链接、初始化。2、为对象分配内存。3、处理并发安全问题。4、初始化分配的空间。5、设置对象的对象头。6、执行init方法。

请简介常见的垃圾回收算法?

引用计数算法:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的计算器的值 为0,就说明对象A没有引用了,可以被回收。

可达性分析算法(标记清除算法),是将垃圾回收分为2个阶段,分别是标记和清除。 标记 :从根节点开始标记引用的对象。 清除 :未被标记引用的对象就是垃圾对象,可以被清理。

标记压缩算法:在标记清除算法的基础之上,做了优化改进的算法。和标记清除算法一样,也是从根节点开始,对对象的引用进行标记,在清理阶段,并不是简单的清理未标记的对象,而是将存活的对象压缩到内存的一端,然后清理边界以外的垃圾,从而解决了碎片化的问题。

复制算法:核心就是将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收。

分代收集算法:一般分为新生代、老年代。新生代基本采用复制算法,老年代采用标记-压缩算法。

增量收集算法、分区算法等其它算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值