Java面试之JVM原理总结】的更多相关文章

1.什么是JVM? 答:JVM是Java Virual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域.JVM屏蔽了与具体操作系统平台相关的信息,时Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改的运行.JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行.…
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端.  数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难: 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N).链表的特点是:寻址困难,插入和删除容易. 哈希表 那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表…
一.CAS是什么? 比较并交换,它是一条CPU并发原语. CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做. java.util.concurrent.atomic中的AtomicXXX,都使用了这些底层的JVM支持为数字类型的引用类型提供一种高效的CAS操作,在java.util.concurrent中的大多数类在实现时都直接或间接的使用了这些原子变量类. 原语属于操作系统用语范畴,是由若干条…
1.JVM内存查看与分析,编写内存泄露实例 堆区.栈区.方法区.本机内存都有可能内存溢出.在这里编写堆区内存溢出实例.如下(来自<深入理解Java虚拟机>一书. // -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError public class HeapOutOfMemoryError { static class OOMObject{} public static void main(String[] args) { List<OOMObje…
Hi, 我是Mic. 今天分享一道一线互联网公司必问的面试题. "JVM如何判断一个对象可以被回收" 关于这个问题,来看看普通人和高手的回答. 普通人: 嗯.......... 高手: 好的,面试官. 在JVM里面,要判断一个对象是否可以被回收,最重要的是判断这个对象是否还在被使用,只有没被使用的对象才能回收. 引用计数器,也就是为每一个对象添加一个引用计数器,用来统计指向当前对象的引用次数, 如果当前对象存在应用的更新,那么就对这个引用计数器进行增加,一旦这个引用计数器变成0,就意味…
1.  Java中数据类型分类 1.1    基本数据类型 又称为原始数据类型,byte,short,char,int,long,float,double,boolean,他们之间的比较应该使用(==),比较的是他们的值. 1.2    复合数据类型 当复合数据类型用(==)进行比较,比较的是他们在内存中的存放地址.下面介绍equals方法. 在Java的Object类中定义了equals方法,当复合数据类型之间进行equals比较时,这个方法的初始行为是比较对象在堆内存中的地址,但在一些诸如S…
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2)掌握Git.SVN等版本管理工具,熟练使用Maven.Jenkins等工具. (3)熟练使用MySQL数据库,了解InnoDB存储引擎,接触过MySQL的调优.熟悉Redis数据库. (4)熟练使用Linux常用命令,编写过shell脚本. (5)熟练使用Spring.Hibernate等框架. .…
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 Java 面试知识点解析(二)--高并发编程篇 (一)JVM 基础知识 问题和答案都是自行整理的,所以仅供参考!欢迎指正! 1)Java 是如何实现跨平台的?…
一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作.(即单线程内按代码顺序执行.但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进行重排序,这是合法的.换句话说,这一是规则无法保证编译重排和指令重排). 1. 监视器上的解锁操作 happens-before 其后续的加锁操作.(Synchronized 规则) 2. 对volatile变量的写操作 happens-before 后续的读操作.(volatile 规则) 3.…