
JVM
文章平均质量分 55
咩哥无敌
这个作者很懒,什么都没留下…
展开
-
JVM之GC日志
GC日志有什么用 在Java中,GC日志能够帮助我们分析内存动态分配和垃圾回收,让我们有针对的对程序进行优化 如何查看GC日志 先准备一个案例程序 public class GCTest { public static void main(String[] args) { int i = 0; List<User> userList = new ArrayList<>(); while (true) {原创 2022-04-14 17:19:54 · 3581 阅读 · 0 评论 -
JVM调优之性能监控工具
jstack jstack简介 jstack是JDK自带的堆栈追踪工具,通过jstack可以生成指定进程号的线程快照,通过线程快照可以快速获取到各线程的状态,从而分析出程序长时间卡顿、cpu过高、死锁等原因 jstack使用 运行一个死锁的程序,以下是死锁程序的实例代码: public class JstackTest { private static Object l1 = new Object(); public static void main(String[] ar原创 2022-04-12 19:31:21 · 611 阅读 · 0 评论 -
JVM之垃圾回收
简介 JVM具有自动垃圾回收处理,比起手动回收,开发效率提高了,并且不会出现忘记回收和多次回收的问题。通过了解垃圾回收的原理,选择合适的垃圾回收器,可以提高程序的性能。 如何标记垃圾 在没有任何引用指向一个对象时称为垃圾,通过引用计数法/根可达算法来标记垃圾 引用计数法就是通过给对象添加一个引用计数器,有对象被一个地方引用时,计数器加1,当没引用时则减1,这种算法有一个缺陷,无法标记互相引用的对象,在Java中没用这种算法作为标记垃圾的算法 根可达算法就是通过一些GC Roots的对象作为起始点,原创 2022-04-08 19:20:38 · 604 阅读 · 0 评论 -
JVM运行时数据区
一、程序计数器 每个线程独有的,如果执行的是JAVA方法,则记录当前线程正在执行的字节码指令地址,如果执行的是Native 方法,值为undefined,程序计数器是唯一不会出现OOM的内存区域 二、虚拟机栈 每个线程独有,随着线程的创建而创建,随着线程的销毁而销毁 每个方法执行的同时会创建栈帧,只有位于顶部的栈帧才是有效栈帧,称为当前栈帧 栈帧会存储局部变量表、操作数栈、动态链接、方法出口等 执行引擎执行的所有操作只针对当前栈帧 栈帧随着方法的调用而创建,随着方法的结束和销毁 ...原创 2022-04-07 17:46:38 · 1039 阅读 · 0 评论 -
JVM类加载器
ClassLoader描述 只有Class被JVM加载到内存时,其他Class才能引用,.class文件是怎么被加载到JVM中的就是通过ClassLoader,JVM是按需动态加载,采用双亲委派机制。 JVM什么时候加载.class文件 当执行new操作时候 当执行Class.forName 当执行ClassLoader.loadClass 在Java程序中通过getClassLoader()可以打印类加载器 例如: public static void main(String args[]) {原创 2022-04-06 17:09:35 · 658 阅读 · 0 评论 -
GC年龄最大值是多少
最大为15,因为记录在对象头(markword)中记录GC年龄的只有4位,最多只能记录1111,转化成10进制就是15原创 2021-09-04 19:20:24 · 510 阅读 · 3 评论 -
Java对象的创建过程
Loading 使用双亲委派机制加载类,主要为安全考虑 Linking Verification 验证文件是否符合JVM规定 Preparation 静态成员变量赋默认值 Resolution 将类、方法、属性等符号引用解析为直接引用 常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用 Initializing 调用类初始化代码 ,给静态成员变量赋初始值 ...原创 2021-09-04 14:28:38 · 94 阅读 · 0 评论