Java 虚拟机部分面试题
Java虚拟机部分的面试内容包括三部分:GC、类加载机制以及内存
Java内存区域
JVM内存分为哪几部分,这些部分分别都存储哪些数据?
线程隔离的数据区:程序计数器、Java虚拟机栈、本地方法栈。
由所有线程共享的数据区:Java堆、方法区。
程序计数器
可以看作当前线程所执行的字节码的行号指示器。
Java虚拟机栈
Java虚拟栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
本地方法栈
本地方法栈与Java虚拟机栈所发挥的作用是非常相似的。它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到Native方法服务。
Java堆
存放对象实例
方法区
存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。对象的创建过程
例如:
Dog dog= new Dog();
当虚拟机执行到new指令时,它先在常量池中查找“Dog”,看能否定位到Dog类的符号引用;如果能,说明这个类已经被加载到方法区了,则继续执行。如果没有,就让Class Loader先执行类的加载。
然后,虚拟机开始为该对象分配内存,对象所需要的内存大小在类加载完成后就已经确定了。这时候只要在堆中按需求分配空间即可。具体分配内存时有两种方式,第一种,内存绝对规整,那么只要在被占用内存和空闲内存间放置指针即可,每次分配空间时只要把指针向空闲内存空间移动相应距离即可,当某对象被GC回收后,则需要进行某些对象内存的迁移。第二种,空闲内存和非空闲内存夹杂在一起,那么就需要用一个列表来记录堆内存的使用情况,然后按需分配内存。
对于多线程的情况,如何确保一个线程分配了对象内存但尚未修改内存管理指针时,其他线程又分配该块内存而覆盖的情况?有一种方法,就是让每一个线程在堆中先预分配一小块内存(TLAB本地线程分配缓冲),每个线程只在自己的内存中分配内存。但对象本身按其访问属性是可以线程共享访问的。
内存分配到后,虚拟机将分配的内存空间都初始化为零值(不包括对象头)。实例变量按变量类型初始化相应的默认值(数值型为0,boolan为false),所以实例变量不赋初值也能使用。接着设置对象头信息,比如对象的哈希值,GC分代年龄等。
从虚拟机角度,此时一个新的对象已经创建完成了。但从我们程序运行的角度,新建对象才刚刚开始,对象的构造方法还没有执行。只有执行完构造方法,按构造方法进行初始化后,对象才是彻底创建完成了。
构造函数的执行还涉及到调用父类构造器,如果没有显式声明调用父类构造器,则自动添加默认构造器。
到此,new运算符可以返回堆中这个对象的引用了。
此刻,会根据dog这个变量是实例变量、局部变量或静态变量的不同将引用放在不同的地方:
如果dog局部变量,dog变量在栈帧的局部变量表,这个对象的引用就放在栈帧。
如果dog是实例变量,dog变量在堆中,对象的引用就放在堆。
如果dog是静态变量,dog变量在方法区,对象的引用就放在方法区。
GC
在Java中如何判断对象已死?
(1)应用计数法
(2)可达性分析法在Java中对象什么时候可以被回收?
当一个对象到GC Roots不可达时,在下一个垃圾回收周期中尝试回收该对象,如果该对象重写了finalize()方法,并在这个方法中成功自救(将自身赋予某个引用),那么这个对象不会被回收。但如果这个对象没有重写finalize()方法或者已经执行过这个方法,也自救失败,该对象将会被回收。
3.垃圾收集算法
(1)标记-清除法(2)复制算法(3)标记-整理法(4)分代收集算法
类加载机制
类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中,类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。
Java 虚拟机部分面试题的更多相关文章
- Java 虚拟机面试题全面解析(干货)
Java 虚拟机面试题全面解析(干货) JDK 是什么 JRE 是什么 Java历史版本的特性 Java Version SE 50 Java Version SE 6 Java Version SE ...
- 从一道面试题深入了解java虚拟机内存结构
记得刚大学毕业时,为了应付面试,疯狂的在网上刷JAVA的面试题,很多都靠死记硬背.其中有道面试题,给我的印象非常之深刻,有个大厂的面试官,顺着这道题目,一直往下问,问到java虚拟机的知识,最后把我给 ...
- 面试题——Java虚拟机
一.运行时数据区域 Java虚拟机在执行Java程序的时候会把它所管理的内存划分为若干个不同的数据区域,这些区域各有用途: 程序计数器:(线程私有的) 程序计数器是一块较小的内存,可以看作是当前线程所 ...
- Java面试题之Java虚拟机垃圾回收
JVM的垃圾回收机制,在内存充足的情况下,除非你显式的调用System.gc(),否则不会进行垃圾回收:在内存充足的情况下垃圾回收会自动运行. 一.引用计数算法 1.定义:引用计数算法会给对象添加一个 ...
- 深入理解java虚拟机(1)------内存区域与内存溢出
在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...
- Java程序员面试题集(51-70)(转)
转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...
- Java程序员面试题集(1-50)(转)
转:http://blog.csdn.net/jackfrued/article/details/17339393 下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和 ...
- 谈谈java虚拟机
本文可作为北京圣思元深入java虚拟机的课堂笔记. 先看一个令人dan teng的面试题 public class Singleton { public static Singleton s=new ...
- 北京一家JAVA开发公司面试题(留给后人)
1.jsp有哪些内置对象?作用分别是什么? 2.描述一下servlet的生命周期和基本架构. 3.多线程有几种实现方法,都是什么? 同步有几种实现方法,都是什么? 4.作用域public priv ...
随机推荐
- How Qt Signals and Slots Work(感觉是通过Meta根据名字来调用)
Qt is well known for its signals and slots mechanism. But how does it work? In this blog post, we wi ...
- qtablewidget qss加上这个,QHeaderView::section
qtablewidget qss加上这个,QHeaderView::section { color: white; padding: 4px; height:24px; b ...
- 解释一下,知乎上关于C语言奇技淫巧最火的回答。
前几天逛知乎,碰巧发现一个很火的问题. “C 语言有什么奇技淫巧?”虽然问题本身没有什么特殊的地方,但是网友的回答却是非常幽默. 下面就让我们一起来分析一下,被赞最多的答案“C 语言运算符 趋向于‘- ...
- C语言实现常用数据结构——链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...
- hadoop之hive高级操作
在输出结果较多,需要输出到文件中时,可以在hive CLI之外执行hive -e "sql" > output.txt操作 但当SQL语句太长或太多时,这种方式不是很方便,可 ...
- spring源码解析之IOC容器(三)——依赖注入
上一篇主要是跟踪了IOC容器对bean标签进行解析之后存入Map中的过程,这些bean只是以BeanDefinition为载体单纯的存储起来了,并没有转换成一个个的对象,今天继续进行跟踪,看一看IOC ...
- "犯罪心理"解读Mybatis拦截器
原文链接:"犯罪心理"解读Mybatis拦截器 Mybatis拦截器执行过程解析 文章写过之后,我觉得 "Mybatis 拦截器案件"背后一定还隐藏着某种设计动 ...
- Python自学day-4
一.字符串转为字典(eval):也可以用于转列表.集合等 s1 = "['name','leo']" s_list = eval(s1) #字符串转换为列表 print(s_lis ...
- Scala 学习之路(十三)—— 隐式转换和隐式参数
一.隐式转换 1.1 使用隐式转换 隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能.示例如下: // 普通人 clas ...
- PATA 1011 World Cup Betting (20)
1011. World Cup Betting (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Wit ...