202204-30 java虚拟机JVM类加载机制原理(面试必问) 目录1、类加载的过程。1)加载2)验证3)准备4)解析5)初始化2、Java虚拟机中有哪些类加载器?1)启动类加载器(BootstrapClassLoader):2)扩展类加载器(ExtensionClassLoader):3)应用程序类加载器(ApplicationClassLoader):3、什么是双亲委派模型?4、为什么使用双亲委派模式?5、有哪些场景破坏了双亲委派模型?1)线程上下文类加载器2)Tomcat的多Web应用程序6、为什么要破坏双亲委派模型?7、如何破坏双亲委... 继续阅读 >
202109-18 java虚拟机中栈的运行知识点总结 运行原理1、不同线程中所包含的栈帧是不允许存在相互引用的。2、如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给当前一个栈针,并且虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。3、Java方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另一种是抛出异常。不管使用哪种方式,都会导致栈帧被弹出。实例publicclassStackFrameTest{publicstaticvoidmain(String... 继续阅读 >
202109-06 Java虚拟机精选面试题20道 目录1.介绍下Java内存区域(运行时数据区)。程序计数器(ProgramCounterRegister)Java虚拟机栈(JavaVirtualMachineStacks)本地方法栈(NativeMethodStack)Java堆(JavaHeap)方法区(MethodArea)运行时常量池(RuntimeConstantPool)2.怎么判定对象已经“死去”?引用计数法可达性分析算法3.介绍下四种引用(强引用、软引用、弱引用、虚引用)?4.垃圾收集有哪些算法,各自的特点?标记-清除算法复制算法标记... 继续阅读 >
202105-02 java虚拟机之JVM调优详解 JVM常用命令行参数1.查看参数列表虚拟机参数分为基本和扩展两类,在命令行中输入JAVA_HOME\bin\java就可得到基本参数列表。在命令行输入JAVA_HOME\bin\java?X就可得到扩展参数列表。2.基本参数说明:-client,-server:两种Java虚拟机启动方式,client模式启动比较快,但是性能和内存管理相对较差,server模式启动比较慢,但是运行性能比较高,windos上采用的是client模式,Linux采用server模式-classpath-cp:虚... 继续阅读 >
202105-02 Java虚拟机内存区域划分详解 在谈JVM内存区域划分之前,我们先来看一下Java程序的具体执行过程,我画了一幅图。Java源代码文件经过编译器编译后生成字节码文件,然后交给JVM的类加载器,加载完毕后,交给执行引擎执行。在整个执行的过程中,JVM会用一块空间来存储程序执行期间需要用到的数据,这块空间一般被称为运行时数据区,也就是常说的JVM内存。所以,当我们在谈JVM内存区域划分的时候,其实谈的就是这块空间——运行时数据区。大家应该对官... 继续阅读 >
202104-07 浅析Java虚拟机详解之概述、对象生存法则 Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。一、概述Java堆和方法区这两个区域有着很显著的不确定性:1、一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样2、只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的垃圾收集器所关注的正是这部分的内存该如何管理二、... 继续阅读 >
202102-23 java虚拟机jvm方法区实例讲解 和java堆一样,方法区是一块所有线程共享的内存区域,用于保存系统的类信息,类的信息有哪些呢。字段、方法、常量池。方法区也有一块内存区域所以方法区的内存大小,决定了系统可以包含多少个类,如果系统类太多,方法区内存不够肯定会导致方法区溢出,虚拟机同样会抛出内存溢出信息。(内存溢出后面相关文章给大家总结)jdk6和jdk7中,方法区可以理解为永久区(Perm).永久区可以使用参数-XX:PermSize和-XX:MaxPermSize制定。默认情况... 继续阅读 >
202012-05 详解Java 虚拟机垃圾收集机制 1垃圾收集发生的区域之前我们介绍过Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程共存亡。栈中的每一个栈帧分配多少内存基本上在类结构确定下来时就已知,因此这几个区域的内存分配和回收都具有确定性,不需要考虑如何回收的问题,当方法结束或线程结束,内存自然也跟着回收了而Java堆和方法区这两个区域则有显著的不确定性,只有在程序运行时我们才能知道程序究竟创建了哪些对象,创建... 继续阅读 >