202303-16 JAVA jvm系列--java内存区域 目录一、JVM的组成结构如图:二、JVM运行流程三、java内存区域详解(运行时数据区域)(一)程序计数器(二)java虚拟机栈(三)本地方法栈(四)java堆(五)方法区运行时常量池(六)直接内存总结JVM:JavaVirtualMachine,Java虚拟机,包括处理器、堆栈、寄存器等,是用来执行java字节码(二进制的形式)的虚拟计算机。一、JVM的组成JVM由以下四部分组成(两个子系统和两个组件): 类加载器(ClassLoader)执行引擎(Ex... 继续阅读 >
202205-27 JAVA JVM面试题总结 目录JVM的主要作用是什么?请你描述一下Java的内存区域?请你描述一下Java中的类加载机制?加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化使用卸载在JVM中,对象是如何创建的?内存分配方式有哪些呢?请你说一下对象的内存布局?对象头Header锁的两个列表实例数据InstanceData对齐Padding对象访问定位的方式有哪些?如何判断对象已经死亡?JVM的主要作用是什么?JVM就是JavaVirtualMachine... 继续阅读 >
202205-17 深入理解JVM自动内存管理 目录一、前言1.1计算机==>操作系统==>JVM1.1.1虚拟与实体(对上图的结构层次分析)1.1.2Java程序执行(对上图的箭头流程分析)二、JVM内存空间与参数设置 2.1运行时数据区2.2关于StackOverflowError和OutOfMemoryError2.2.1StackOverflowError2.2.2OutOfMemoryError2.3JVM堆内存和非堆内存2.3.1堆内存和非堆内存2.3.2JVM堆内部构型(新生代和老年代)2.4JVM堆参数设置2.4.1JVM重要参数2.4.2JVM其他参数2.5从日... 继续阅读 >
202205-12 Java Code Cache满导致应用性能降低问题解决 目录0问题描述1排查问题2解决问题3背景知识3.1JIT即时编译3.2CodeCache3.3分层编译3.4CodeCache满了怎么办3.5CodeCache调优3.6问题解决3.7运行时查看CodeCache0问题描述一个应用在运行一段时间后,随着访问量不断增加,突然处理能力下降。但是从流量,jstack,gc上看基本正常。感觉好像突然从“健康状态”进入了“虚弱状态”。1排查问题在JVM日志里,可以发现如下log:JavaHotSpot(TM)64-... 继续阅读 >
202204-16 面试时必问的JVM运行时数据区详解 目录前言正文1、运行时数据区(Run-TimeDataAreas)1)程序计数器(ProgramCounterRegister)2)Java虚拟机栈(JavaVirtualMachineStacks)3)本地方法栈(NativeMethodStacks)4)堆(Heap)5)方法区(MethodArea)6)运行时常量池(Run-TimeConstantPool)2、Java中有哪几种常量池?3、class文件常量池4、运行时常量池5、字符串常量池6、字符串常量池是否属于方法区?7、运行时常量池和字符串常量池的关联?8、St... 继续阅读 >
202204-16 面试必时必问的JVM 类加载机制详解 目录前言正文1、类加载的过程。1)加载2)验证3)准备4)解析5)初始化2、Java虚拟机中有哪些类加载器?1)启动类加载器(BootstrapClassLoader):2)扩展类加载器(ExtensionClassLoader):3)应用程序类加载器(ApplicationClassLoader):3、什么是双亲委派模型?4、为什么使用双亲委派模式?5、有哪些场景破坏了双亲委派模型?6、为什么要破坏双亲委派模型?7、如何破坏双亲委派模型?8、Tomcat的类加载器?9、Tomcat... 继续阅读 >
202204-12 一篇文章带你了解JVM垃圾回收 目录1.堆空间的基本结构:2.空间分配担保机制3.如何判断一个对象已经无效4不可达的对象并非“非死不可”5如何判断一个常量是废弃常量?6如何判断一个类是无用的类7.垃圾回收算法7.1标记-清除算法7.2标记-复制算法7.3标记-整理算法7.4分代收集算法总结如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。如何判断一个常量是废弃常... 继续阅读 >
202202-11 Java面试题冲刺第二十一天--JVM 目录面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?JavaheapspaceGCoverheadlimitexceeded PermgenspaceMetaspaceUnabletocreatenewnativethreadOutofswapspace?KillprocessorsacrificechildRequestedarraysizeexceedsVMlimitDirectbuffermemory面试题2:说说JVM的内存结构?面试题3:说一下new一个对象的过程是什么样的?总结面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解... 继续阅读 >
202109-28 分析JVM源码之Thread.interrupt系统级别线程打断 目录一、interrupt的使用特点二、jvm层面上interrupt方法的本质三、ParkEvent对象的本质四、Park()对象的本质五、利用jni实现一个可以被打断的MyThread类六、总结一、interrupt的使用特点我们先看2个线程打断的示例首先是可打断的情况:@TestpublicvoidinterruptedTest()throwsInterruptedException{Threadsleep=newThread(()->{try{log.info("sleepthreadstart");TimeUnit.SEC... 继续阅读 >
202109-16 分析JVM的执行子系统 目录一、Class类文件结构1.1、JVM的平台无关性1.2、Class类文件二、类的加载机制2.1、加载2.2、验证2.3、准备阶段2.4、解析阶段2.5、初始化阶段三、类加载器3.1、双亲委派模型3.2、Tomcat是怎么保证两个应用相同名称类的隔离性一、Class类文件结构1.1、JVM的平台无关性与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序的一次编写,到处运行。各种... 继续阅读 >
202109-16 分析JVM的组成结构 目录一、JavaSE体系二、运行时数据区三、程序计数器3.1、什么是程序计数器3.2、程序计数器有什么特点3.3、用个例子来说明四、虚拟机栈4.1、局部变量表4.2、操作数据栈4.3、动态链接4.4、方法出口4.5、栈溢出五、本地方法栈六、方法区七、堆八、运行时常量池8.1、符号引用8.2、字面量8.3、jvm各版本运行时常量池变化8.4、直接内存一、JavaSE体系JavaSE,Java平台标准版,为JavaEE和JavaME提供了基础。JDK:Java开发... 继续阅读 >
202109-09 JVM执行引擎和垃圾回收要点总结 目录一、执行引擎二、垃圾对象标记1、引用计数法2、可达性分析算法三、垃圾回收机制1、标记清除算法2、标记整理算法3、复制算法4、分代收集算法四、源代码地址一、执行引擎应用程序经过编译,转换为字节码文件,字节码加载到内存空间并不能直接在操作系统上执行,执行引擎作为Java虚拟机核心的组成部分,作用就是将字节码指令解释/编译为对应系统平台上的本地机器指令。解释器:虚拟机启动时会根据预定义对字节码采用逐行解释的方... 继续阅读 >
202109-06 深入理解JVM垃圾回收算法 目录一、垃圾标记阶段1.1、引用计数法(java没有采用)1.2、可达性分析算法二、对象的finalization机制2.1、对象是否"死亡"三、使用(MAT与JProfiler)工具分析GCRoots3.1、获取dump文件3.2、GCRoots分析四、垃圾清除阶段4.1、标记-清除算法4.2、复制算法4.3、标记-压缩(整理,Mark-Compact)算法4.4、以上三种垃圾回收算法对比4.5、分代收集算法4.6、增量收集算法4.7、分区算法G1回收器一、垃圾标记阶段对象存活判断:在堆里存放... 继续阅读 >
202109-04 JVM入门之内存结构(堆、方法区) 目录1、堆1.1定义1.2堆的作用1.3特点1.4堆内存溢出1.5堆内存诊断2、方法区2.1结构(1.6对比1.8)2.2内存溢出2.3常量池2.4运行时常量池2.5常量池与串池的关系2.6StringTable的位置2.7StringTable垃圾回收2.8方法区的垃圾回收3、直接内存释放原理1、堆1.1定义是Java内存区域中一块用来存放对象实例的区域【几乎所有的对象实例都在这里分配内存】通过new关键字创建的对象都会被放在堆内存,jvm运行时数据区中... 继续阅读 >
202109-04 打卡每日10道面试题——JVM篇 目录1、请你简述一下Java内存结构(运行时数据区)①程序计数器②虚拟机栈③本地方法栈④堆⑤方法区⑥运行时常量池2、请问jvm垃圾回收是否涉及栈内存?3、虚拟机栈内存的分配越大越好吗?4、从JVM的角度分析,方法内的局部变量是否是线程安全的?5、虚拟机栈内存溢出的情况有哪些?6、请你说一下JVM运行时数据区方法区的演进?7、请问Java虚拟机中有哪些类加载器?8、请你说一下类的加载的过程?9、请你说一下什么是双亲委... 继续阅读 >
202108-23 详解JVM系列之内存模型 目录1.内存模型和运行时数据区2、思维导图和图例3、对象向JVM申请空间4、为什么需要Survivor区?5、为什么需要两个Survivor区?6、例子进行验证堆内存溢出方法区内存溢出Java虚拟机栈1.内存模型和运行时数据区这一章学习java虚拟机内存模型(JavaVirtualmachinemenorymodel),可以这样理解,jvm运行时数据库是一种规范,而JVM内存模型是对改规范的实现java虚拟机重点存储数据的是堆和方法区,所以本章节也重点从这两... 继续阅读 >