首页 > 编程语言 >Java-JVM-八股文

Java-JVM-八股文

时间:2023-07-16 17:55:28浏览次数:34  
标签:线程 八股文 标记 对象 存活 GC JVM Java

  1. 线程共享区
  2. 堆区与方法区是所有线程共享的
    栈区:主要存放基本数据类型与对象引用(仅限局部变量,成员变量不管是不是基本数据类型都存放于堆)
    堆区:主要存放对象实例与数组[我的理解就是,由代码操作生成的对象或者说引用类型存放于堆]
    方法区:类信息(class文件)、静态变量与静态方法
    本地方法栈:非静态方法
    
  3. 如何排查JVM问题
  4. 空间:jmap 查看 JVM各个区域的占用情况,查看是否栈区过大?是否堆区过大?
    时间:jstack 查看线程的运行情况,是否存在死锁或者阻塞?
    OOM:
    查看: jstat 查看垃圾回收情况,fullgc 与 younggc 的运行情况
    记录: JVM启动参数 --> -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/base,发生OOM的时候记录下当时的情况-dump文件,便于回溯定位问题
    分析:jvisualvm 可以针对dump文件进行分析异常对象,异常线程
    
  5. 从加载JVM到GC清理,一共经历什么过程-√
  6. 1.方法区加载字节码,加载静态方法、静态成员变量
    2.堆区创建实例化对象,保存至 年轻代 Eden 区
    3.将引用传回栈区
    4.经过minor GC,对象每次存活,年龄加一,并迁移至survival区-存活区,年龄大于等于15的时候,对象进入老年代
    5.栈区的引用被移除以后,对象最终被GC回收
    
  7. 如何确定对象是否需要回收
  8. 根可达算法:所有对象都是基于一个根对象上的,从根对象开始遍历,能找到引用的就是还需要的对象,否则就是不需要的对象。
    
  9. JVM垃圾回收机制
  10. 总共三种算法:
    标记:将所有对象判断是否根可达,将不可达对象标记并进行删除
    缺点:会有碎片空间出现
    
    复制法:申请一块与当前存储空间相同的空间,根可达算法标记所有存活对象,将存活对象迁移至新申请空间,迁移完毕以后,原空间统一清空
    缺点:需要的空间较大
    
    标记优化法:根可达算法标记所有存活对象,并将存活对象重新排列至连续空间,标记以及迁移排列完毕以后,将存活对象连续空间以外的空间统一清除
    
  11. 什么是STW
  12. STW,stop the world,即,在GC运行过程中,要将所有Java进程冻结,以便于GC进程进行垃圾回收。
    
  13. 常用的JVM启动参数有哪些?-※

标签:线程,八股文,标记,对象,存活,GC,JVM,Java
From: https://www.cnblogs.com/dengliang356a/p/17558258.html

相关文章

  • 自定义java@注解
    自定义注解主要用于抽象出重复代码,以减少枯燥无味的重复工作量举例:创建Redis分布式锁注解步骤:新建interface接口@Target(ElementType.METHOD)//描述注解使用范围@Retention(RetentionPolicy.RUNTIME)//设置注解时间范围//SOURCE源文件保留//CLASS,......
  • Java-集合-八股文
    list、setlist:有序,可重复,允许多个null,支持下标随机访问set:无序,不可重复,单一null,必须遍历访问arraylist、linkedlistarraylist:基于数组实现,占用连续空间,有利于查找、修改,不利于插入、删除[适用场景不同]linkedlist:基于链表实现,不要求占用空间连续,有利于插入、删除,不利于......
  • Java处理子父级菜单的方式二
    处理存在子父级关系的数据是写代码的过程中常见的操作,前面讲解过使用递归的方法来做,可以参考这篇博客https://www.cnblogs.com/yilangcode/p/16831867.html今天来聊聊一种新的处理方式。使用List集合多轮遍历,添加子父级菜单信息。建表SQLDROPTABLEIFEXISTS`sa_menu`......
  • java序列化和反序列化
    感觉网上很多博客对这个的解释实在太官方了,也没说为什么一定要实现序列化接口。去看看rpc框架源码,或者java网络编程或者向磁盘进行序列化就知道了。首先这是个标记接口,就是用来告诉程序某某对象是可序列化对象,像dubbo框架,要传输对象就必须序列化。网络编程已经告诉你了,想要向另......
  • jvm垃圾回收
    1.GarbageCollect(垃圾回收)之前说堆内存中有垃圾回收,比如Young区的MinorGC,Old区的MajorGC,Young区和Old区的FullGC。但是对于一个对象而言,怎么确定它是垃圾?是否需要被回收?怎样对它进行回收?等等这些问题我们还需要详细探索。因为Java是自动做内存管理和垃圾回收的,如果不了......
  • Java性能优化-测试try-catch放在循环内和外的性能对比与业务区别
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751使用如上方式测试Java中try-catch放在循环内和循环外是否有性能上的差别。注:博客:https://blog.csdn.net/badao_lium......
  • 用java写一个逆置单链表
    用Java写一个逆置单链表单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用。逆置单链表是指将原来的单链表中的节点顺序颠倒过来。在这篇文章中,我们将使用Java来实现逆置单链表的功能。我们将会介绍单链表的基本概念,并给出逆置单......
  • 用java创建一个单链表
    使用Java可以很方便地创建和操作数据结构,其中包括单链表。单链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。这种数据结构可以用于实现队列、栈、链表等等。在本文中,我们将学习如何使用Java创建一个单链表,并演示一些基本的操作。首先,我......
  • day07 7.1 Java中的面向对象之类与对象
    day077.1Java中的面向对象之类与对象【一】类与对象【1】类定义规范类与对象的关系类是实体对象的概念模型,笼统的,不具体的,比如人类、动物类、鸟类对象又称为实体,类具体化的表现小红/小明小猫一号/小狗一号对象中有属性,有方法不同对象属性是独有的方法是共......
  • JVM(十五)垃圾回收器概述
    JVM(十五)垃圾回收器概述1垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现由于JDK版本的高速迭代,Java发展至今已经衍生了众多的GC版本从不同的角度分析垃圾收集器,可以将GC分为不同的类型2垃圾回收器分类按照线程数分,可以分......