面试之JVM】的更多相关文章

前言:该篇主要对Java虚拟机相关的题目进行介绍. JVM篇 基本上在面试的时候,都会或多或少的涉及JVM,主要看面试官的侧重点,笔者在面试过程中,是通过volatile问题,引导了JVM相关问题上的. 1)JVM的内存区域,各区域存储什么,及其作用. ①程序计数器 #1.当前线程正在执行字节码行号指示器. #2.为了线程切换后能够恢复到正确的执行位置,每个线程都需要一个独立的程序计数器.(线程私有) #3.当线程执行的是一个Java方法,程序计数器记录的是正在执行的虚拟机字节码指令的地址. #…
目录 Java虚拟机 类的加载方式 Java内存模型 程序计数器(PC) Java虚拟机栈(Stack) 本地方法栈 元空间(MetaSpace) Java堆(Heap) 内存分配策略 垃圾回收(GC) 参考资料 面:说说你对Java的理解? 平台无关性:一次编译,到处运行 GC:垃圾回收,不必像C++一样手动释放堆内存,由JVM自动完成 语言特性:泛型.反射.Lambda表达式 面向对象:封装.继承.多态 类库:Java自带的库,如并发.集合.IO.网络有关等的库 异常处理:抛出异常和捕获异常…
JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收集有哪些算法,各自的特点? HotSpot 为什么要分为新生代和老年代? 常见的垃圾回收器有那些? 介绍一下 CMS,G1 收集器. Minor Gc 和 Full GC 有什么不同呢? 本文导火索 当需要排查各种内存溢出问题.当垃…
Hi, 我是Mic. 今天分享一道一线互联网公司必问的面试题. "JVM如何判断一个对象可以被回收" 关于这个问题,来看看普通人和高手的回答. 普通人: 嗯.......... 高手: 好的,面试官. 在JVM里面,要判断一个对象是否可以被回收,最重要的是判断这个对象是否还在被使用,只有没被使用的对象才能回收. 引用计数器,也就是为每一个对象添加一个引用计数器,用来统计指向当前对象的引用次数, 如果当前对象存在应用的更新,那么就对这个引用计数器进行增加,一旦这个引用计数器变成0,就意味…
1.JVM内存查看与分析,编写内存泄露实例 堆区.栈区.方法区.本机内存都有可能内存溢出.在这里编写堆区内存溢出实例.如下(来自<深入理解Java虚拟机>一书. // -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError public class HeapOutOfMemoryError { static class OOMObject{} public static void main(String[] args) { List<OOMObje…
1.Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. 2.JVM内存分布 程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.程序中的分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器完成.由于多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,故该区域为线程私有的内存.虚拟机栈:描述的是Java方法执行的内存模型,用于存储局部变量表.操作数栈.动态链接.方法出口等堆:是Java虚拟…
1.什么是JVM? 答:JVM是Java Virual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域.JVM屏蔽了与具体操作系统平台相关的信息,时Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改的运行.JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行.…
Tips:关注公众号:松花皮蛋的黑板报,领取程序员月薪25K+秘籍,进军BAT必备! Java堆中存放着大量的Java对象实例,在垃圾收集器回收内存前,第一件事情就是确定哪些对象是“活着的”,哪些是可以回收的. 引用计数算法 引用计数算法是判断对象是否存活的基本算法:给每个对象添加一个引用计数器,没当一个地方引用它的时候,计数器值加1:当引用失效后,计数器值减1.但是这种方法有一个致命的缺陷,当两个对象相互引用时会导致这两个都无法被回收. 根搜索算法 在主流的商用语言中(Java.C#…)都是使…
JVM介绍 1. JVM的体系架构(内存模型) 绿色的为线程私有,橘色的为线程共有 2. 类加载器 负责将.class文件加载到内存中,并且将该文件中的数据结构转换为方法区中的数据结构,生成一个Class对象 2.1 类加载器分类 自启动类加载器.Bootstrap ClassLoader类加载器.负责加载jdk自带的包. %JAVA_HOME%/lib/rt.jar%即JDK源码 使用C++编写 在程序中直接获取被该加载器加载的类的类加载器会出现null 扩展类加载器.Extension Cl…