JVM
文章平均质量分 84
Java虚拟机相关知识内容总结
Java识堂
这个作者很懒,什么都没留下…
展开
-
JVM实战:哪些区域会发生内存溢出?
内存溢出元空间虚拟机栈堆内存参考博客原创 2022-03-15 16:26:29 · 1324 阅读 · 0 评论 -
JVM实战:使用MAT进行内存溢出排查
内存溢出排查先来了解一下Java堆的组成机构。对于大多数应用来说,Java堆(Java Heap)是Java虚拟机锁管理的内存中最大的一块。Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存堆的结构如下新生代老年代的具体划分比例如下分代的主要作用就是为了更高效的管理内存内存泄漏和内存溢出是2个不同的概念内存泄漏:对象已经不使用了,但是还占用着内存空间,没有被释放内存溢出:堆空间不够用了,通常表现为OutOf.原创 2022-03-13 15:49:05 · 3105 阅读 · 1 评论 -
JVM实战:调优案例分析
请求延迟导致内存溢出堆外内存溢出-XX:+DisableExplicitGC导致System.gc()不生效原创 2022-03-11 11:42:55 · 820 阅读 · 0 评论 -
JVM实战:常见的垃圾回收算法有哪些?
JVM运行数据区Java在执行Java程序的过程中会把所管理的内存划分为为若干个不同的数据区域,如下图JDK1.8之前方法区由永久代实现(永久代在堆中)JDK1.8方法区由元空间实现(元空间在本地内存)JDK1.8之前堆内存被分为新生代,老年代,永久代JDK1.8之后堆内存被分为新生代,老年代,默认比例为1:2,新生代又被分为1个Eden区+2个Survivor区(S0区,S1区),其中Eden区,S0区,S1区的默认比例为8:1:1堆和方法区是所有线程共享的数据区虚拟机栈,本地方法栈,程.原创 2022-03-11 10:55:29 · 1656 阅读 · 1 评论 -
JVM实战:类加载流程
加载当我们要使用一个类的时候,要通过ClassLoader将类加载到内存中类加载阶段主要完成如下三件事情通过全类名,获取类的二进制流解析类的二进制流为方法区内的数据结构创建一个java.lang.Class类的实例,表示该类型,作为方法区这个类的访问入口通过全类名,获取类的二进制流的方式有很多种从zip压缩包中获取从网络中获取运行时计算生成,如动态代理技术…对于非数组类型的加载阶段,即可以使用Java虚拟机内置的类加载器去完成,也可以使用用户自定义的类加载器去完成链接链.原创 2022-03-09 18:13:07 · 150 阅读 · 0 评论 -
JVM实战:三色标记法
垃圾回收流程的一些流程哪些对象是垃圾?当我们进行垃圾回收的时候,首先需要判断哪些对象是存活的?常用的方法有如下两种引用计数法可达性分析法Python判断对象存活的算法用的是引用计数法,而Java则使用的是可达性分析法。通过GC ROOT可达的对象,不能被回收,不可达的对象则可以被回收,搜索走过的路径叫做引用链不可达对象会进行2次标记的过程,通过GC ROOT不可达,会被第一次标记。如果需要执行finalize()方法,则这个对象会被放入一个队列中执行finalize(),如果在fina.原创 2022-03-09 18:00:44 · 1813 阅读 · 0 评论 -
JVM实战:JVM命令行监控工具
介绍在生产环境中,经常会遇到各种各样奇葩的性能问题,所以掌握最基本的JVM命令行监控工具还是很有必要的名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用于分析heapdump文件jps:查看正在运行的Java进程jps可以列出正在运行的Java进程,并显示虚拟机执行主类(Main Class,main()函数所在的.原创 2022-03-09 17:55:39 · 600 阅读 · 0 评论 -
JVM实战:JVM内存分配策略
JVM运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域其中方法区和堆是所有线程共享的数据区。程序计数器,虚拟机栈,本地方法栈是线程隔离的数据区虚拟机栈和本地方法栈中的空间会随着方法的调用和完成而不断分配和释放。应用中创建的对象则会被分配到堆中,当对象不在使用的时候会.原创 2021-07-23 19:55:53 · 4351 阅读 · 2 评论 -
JVM实战:垃圾收集器及其适用场景
垃圾回收流程的一些流程哪些对象是垃圾?当我们进行垃圾回收的时候,首先需要判断哪些对象是存活的?常用的方法有如下两种引用计数法可达性分析法Python判断对象存活的算法用的是引用计数法,而Java则使用的是可达性分析法。通过GC ROOT可达的对象,不能被回收,不可达的对象则可以被回收,搜索走过的路径叫做引用链不可达对象会进行2次标记的过程,通过GC ROOT不可达,会被第一次标记。如果需要执行finalize()方法,则这个对象会被放入一个队列中执行finalize(),如果在fina.原创 2022-03-09 16:30:35 · 721 阅读 · 0 评论 -
JVM实战:JVM运行时数据区
JDK,JRE,JVM的联系是啥?JVM Java Virtual MachineJDK Java Development KitJRE Java Runtime Environment看上图官方的介绍讲的很清楚JVM的作用是啥?JVM有2个特别有意思的特性,语言无关性和平台无关性。语言无关性是指实现了Java虚拟机规范的语言对可以在JVM上运行,如Groovy,和在大数据领域比较火的语言Scala,因为JVM最终运行的是class文件,只要最终的class文件复合规范就可以在JVM上运.原创 2022-03-09 16:07:04 · 1396 阅读 · 1 评论 -
JVM实战:ClassLoader的原理及应用
前言我原来面试的时候被问过一个这样的问题,如果在你项目中建一个java.lang.String的类,那系统中用的String类是你定义的String类,还是原生api中的String类?你可以试一下,发现最终系统中用的还是原生api中的String类,为什么会出现这种情况呢?这还得从类的加载过程说起。我们都知道Java是跨平台的,是因为不同平台下的JVM能将字节码文件解释为本地机器指令,JVM是怎么加载字节码文件的?答案就是ClassLoader,先来打印看一下ClassLoader对象publ.原创 2022-03-09 15:49:50 · 571 阅读 · 0 评论 -
JVM实战:618核心服务内存溢出排查实战
P0事故安排上来原来以为内存溢出这种事情只会发生在书本上,没想到在我们生产环境发生了,而且是618,P0事故安排上了。先回顾一下内存溢出排查的基本思路,然后再来复盘一下内存溢出发生的原因内存溢出排查我们先来了解一下Java堆的组成机构。对于大多数应用来说,Java堆(Java Heap)是Java虚拟机锁管理的内存中最大的一块。Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存堆的结构如下新生代老年代的具体划分比.原创 2021-06-26 17:31:59 · 455 阅读 · 2 评论 -
JVM基础教程
运行时数据区域定义:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域类型:程序计数器,虚拟机栈,本地方法栈,Java堆,方法区(运行时常量池),直接内存虚拟机栈包含局部变量表操作数栈动态链接方法出口堆:Java堆是需要重点关注的一块区域,因为涉及到内存的分配(new关键字,反射等)与回收(回收算法,收集器等)栈:-Xss堆:-Xms:堆的最...原创 2018-12-29 00:48:56 · 3211 阅读 · 1 评论