类加载器的关系 类加载器的分类 JVM支持两种类加载器,一种为引导类加载器(Bootstrap ClassLoader),另外一种是自定义类加载器(User Defined ClassLoader) 引导类加载器是由C/C++编写的无法访问到 Java虚拟机规定:所有派生于抽象类ClassLoader的类加载器都划分为自定义加载器 最常见的类加载器只有三个(如上图所示) 用户自定义的类会被系统类加载器所加载,核心类库的类会被引导类加载器所加载 public class ClassLoaderTe…
前言 在Java面试中,简历上有写JVM(Java虚拟机)相关的东西,JVM的类加载机制基本是面试必问的知识点. 类的加载和卸载 JVM是虚拟机的一种,它的指令集语言是字节码,字节码构成的文件是class文件.平常我们写的Java文件,需要编译为class文件才能交给JVM运行.可以这么说:C语言代码——>二进制文件——>计算机硬件,就相当于Java代码——>字节码文件——>JVM.JVM将指定的class文件读取到内存里,并运行该class文件里的Java程序的过程,就称之为类的…
前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了,但是在工作中的应用场景也许不如那些框架,但是在关键时候还是得靠它去搞定问题,俗话说得好,知己知彼,方能百战不殆,JVM作为前往高级工程师的一道坎,从这篇文章开始,我们会去逐步的分析,讲解,攻克这座大山. 有关Java虚拟机类加载机制相关的文章一搜一大把,就也不必再赘述一遍了.在这里捞出一道code…
前言 只有光头才能变强 JVM在准备面试的时候就有看了,一直没时间写笔记.现在到了一家公司实习,闲的时候就写写,刷刷JVM博客,刷刷电子书. 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的.能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 声明:全文默认指的是HotSpot VM 一.简单聊聊JVM 1.1先来看看简单的Java程序 现在我有一个JavaBean:       public class Java3y {           // 姓名…
面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友 前言: JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优.面试)JVM是java中很重要的一块知识,也是面试常问的问题之一,今天笔者就带你深入了解一下jvm的知识. 当然有必要学习JVM了,而且是必须要学,但是其学习迫切程度不是很高,可以等你有了一些项目开发经验再去学习,当你有了项目开发经验之后,你会发现学习JVM会加深你对Java语言特性的理解. 跟许多人一样,我一开始接触 Java 虚…
一.类加载子系统的作用 类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识: ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 加载的类信息存放于一块成为方法区的内存空间.除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 二.类加载子系统的概览图 类加载子系统主要包括三个环节: loading link…
本文目录: 讲一下JVM内存结构? 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 Java对象的定位方式 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载?类加载的过程? 什么是双亲委派模型? 为什么需要双亲委派模型? 什么是类加载器,类加载器有哪些? 类的实例化顺序? 如何判断一个对象是否存活? 可作为GC Roots的对象有哪些? 什么情况下类会被卸载? 强引用.软引用.弱引用.虚引用是什么,有什么区别? Minor GC 和 Full GC的区…
JVM内存模型 Sun在2006年将Oracle JDK开源最终形成了Open JDK项目,两者在绝大部分的代码上都保持一致.JVM的内存模型是围绕着原子性(操作有且仅有一个结果).可见性(racing thread读取变量的值永远是最新的)和有序性(指令的执行时有序并且符合happen-before原则的)这三个特性建立的,运行时数据区构成如下: 线程隔离区域:虚拟机栈(Java方法执行时的栈帧,存储本地变量和外部引用),本地方法栈(Native Java方法执行时的栈帧)和程序计数器(保存当…
Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态.多个线程共享堆内存(heap…
写在前面 我们知道,目前市面上的MQ包括Kafka.RabbitMQ.ZeroMQ.RocketMQ等等. 那么他们之间究竟有什么本质区别,分别适用于什么场景呢? 上述抛出的问题,同样在不少公司的Java工程师面试中出现,特别是当你简历上的技术栈包含了这些技术,面试官往往喜欢用这个问题,对你进行摸底考察. 本文我们就一起来探讨一下. (1)有Broker的暴力路由 这个流派最典型的就是Kafka,Kafka实际上为了提升性能,简化了MQ功能模型,仅仅提供了一些最基础的MQ相关的功能,但是大幅度优…