![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
阿 霖
热爱编程,正在进阶java后端,对分布式感兴趣
展开
-
【Java虚拟机】Java VisualVM使用
堆溢出实例通过不断创建Object对象,并加入到List中,导致堆溢出。import java.util.ArrayList;import java.util.List;/** * -Xms100M -Xmx100M * -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/ */public class HeapOOM { public static void main(String[] args) { List&原创 2021-04-10 11:08:13 · 166 阅读 · 0 评论 -
【Java虚拟机】OOM各种情况实例(堆,栈,元空间,直接内存)
文章目录堆溢出(OOM:Java Heap Space)栈溢出(unable to create new native thread)栈溢出(StackOverFlowError)元空间溢出(OOM:MetaSpace)直接内存溢出(OOM:Direct buffer memory)堆内存太小(OOM:GC overhead limit exceeded)代码放在了GitHub上,需要的话可以直接拉:https://github.com/yuanlin-repository/-OOM-堆溢出(OO原创 2021-04-10 10:34:51 · 364 阅读 · 0 评论 -
【JVM】JVM二刷(四)_虚拟机性能监控和故障处理工具
1.jps:虚拟机进程状况工具 作用:列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID。 LVMID与操作系统的进程PID是一致的,使用Windows的任务管理器或UNIX的ps命令也可以查到虚拟机进程的LVMID。jps -q:只输出LVMID,省略主类的名称jps -m:输出虚拟机进程启动时传递给主类main()函数的参数jps -l:输出主类的全名,如果进程执行的是jar包,输出Jar路径jps -原创 2020-09-22 17:22:43 · 210 阅读 · 0 评论 -
【JVM】JVM二刷(三)_类加载机制
一、类加载机制1.加载(loading)通过一个类的全限定名来获取定义此类的二进制字节流 。将这个字节流代表的静态存储结构转化为方法区的运行时数据。在内存中生成该类的java.lang.Class文件,作为方法区这个类的各项数据的访问接口。2.验证(verifycation)验证阶段是十分重要的,它决定了虚拟机是否能 承受恶意代码的攻击,从执行性能上来说,验证阶段的工作量在类加载子系统中占了很大一部分。验证阶段大致分为四个阶段。1.文件格式验证主要验证字节流是否符合Class文件的原创 2020-09-21 19:00:03 · 129 阅读 · 0 评论 -
【JVM】JVM二刷(二)_垃圾回收
垃圾回收一、概念 Java中的对象是采用new关键字或反射的方法创建的,这些对象所需的内存都是堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。 GC为了能够正确的释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控。二、垃圾回收算法1.标记-清除算法 标记清除算法常用于老年代。其过程为:首先标记需要被回收的对象,标记完成后统一回收被标记的对象。 标记清除算法的缺点有:1.一个是效率问题,标记原创 2020-09-20 19:10:06 · 123 阅读 · 1 评论 -
【JVM】JVM二刷(一)_Java虚拟机运行时数据区域
Java虚拟机运行时数据区域一、程序计数器 程序计数器是一块较小的内存空间,它的作用是用于指示当前线程执行字节码的行号 (也可称之为当前线程所执行的字节码的行号指示器)。字节码解释器工作的时候就是通过改变这个程序计数器的值来选取下一条所要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要以来程序计数器来完成。 程序计数器是线程私有的“内存”。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的线程计数器,各条线程之间计数器互不影响,独立存储。 如果原创 2020-09-18 07:56:31 · 91 阅读 · 0 评论