电视台网站建设方案.doc/seo搜索引擎专员

电视台网站建设方案.doc,seo搜索引擎专员,深圳外网站建设,兼职网站编辑1.什么是程序计数器 程序计数器是 JVM 管理线程执行的“定位器”,记录每个线程当前执行的指令位置,确保程序流程的连续性和线程切换的准确性。线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地…

1.什么是程序计数器

  • 程序计数器是 JVM 管理线程执行的“定位器”,记录每个线程当前执行的指令位置,确保程序流程的连续性和线程切换的准确性。
  • 线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。

2.介绍一下Java堆

  • 线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。
  • 组成:年轻代+老年代
    – 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区,一个对象在Eden区存活后就会放入Survivor区
    – 老年代主要保存生命周期长的对象,一个对象在多次Survivor区存活后就会放入老年区
  • Jdk1.7和1.8的区别
    – 1.7中有有一个永久代,存储的是类信息、静态变量、常量、编译后的代码
    – 1.8移除了永久代,把数据存储到了本地内存的元空间中,防止内存溢出

3.什么是虚拟机栈

  1. 每个线程运行时所需要的内存,称为虚拟机栈
  2. 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存
  3. 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法

4. 垃圾回收是否涉及栈内存?

垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放

5.栈内存分配越大越好吗?

未必,默认的栈内存通常为1024k,栈帧过大会导致线程数变少

6.方法内的局部变量是否线程安全?

分情况:

  • 如果方法内局部变量没有逃离方法的作用范围,它是线程安全的
  • 如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全

7.什么情况下会导致栈内存溢出?

  • 栈帧过多导致栈内存溢出,典型问题:递归调用
  • 栈帧过大导致栈内存溢出

8.堆栈的区别是什么?

  1. 栈内存一般会用来存储局部变量和方法调用,但堆内存是用来存储Java对象和数组的的。
  2. 堆会GC垃圾回收,而栈不会。
  3. 栈内存是线程私有的,而堆内存是线程共有的。
  4. 两者异常错误不同,但如果栈内存或者堆内存不足都会抛出异常。
    – 栈空间不足:java.lang.StackOverFlowError。
    – 堆空间不足:java.lang.OutOfMemoryError。

9.解释一下方法区

  • 方法区(MethodArea)是各个线程共享的内存区域
  • 主要存储类的信息、运行时常量池
  • 虚拟机启动的时候创建,关闭虚拟机时释放
  • 如果方法区域中的内存无法满足分配请求,则会抛出OutOfMemoryError:Metaspace

10.介绍一下运行时常量池

  • 常量池:可以看作是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息,里面的地址都是符号地址
  • 当类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址

11.说一说直接内存

  • 并不属于JVM中的内存结构,不由VM进行管理。是虚拟机的系统专门划分出来的内存,java代码和系统都可以直接访问
  • 常见于NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不受JVM内存回收管理

12.说一说类加载器

  • VM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。
  • 类加载器分四种
    – 启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库
    – 扩展类加载器(ExtClassLoader):主要加载JAVA_HOME/jre/lib/ext目录中的类
    – 应用类加载器(AppClassLoader):用于加载classPath下的类,就是我们自己写的类
    – 自定义类加载器(CustomizeClassLoader):自定义类继承ClassLoader,实现自定义类加载规则。

13.说一说双亲委派模型

  • 加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类。例如我们自己写的应用类会到应用类加载器,应用会委托扩展类加载器,扩展类加载器会委托启动类加载器加载,但是启动类加载器里面没有这个类,于是会再次层层返回,直到应用类加载器加载对应的类
  • 通过双亲委派机制可以避免某一个类被重复加载,当父类已经
    加载后则无需重复加载,保证唯一性。
  • 亲委派机制也可以更加安全,保证核心API库不会被修改

14.说一下类装载的执行过程

  1. 加载:将类的二进制数据(.class文件)加载到JVM内存中。
  2. 验证:确保类的字节流符合JVM规范,不会危害虚拟机。
  3. 准备:为类的静态变量分配内存并初始化默认值(如0、false、null)
  4. 解析:将类中的符号引用(如Person@#123)替换为直接引用(实际内存地址)
  5. 初始化:执行类的静态代码块和静态初始化器,完成静态变量的显式赋值。
  6. 使用:程序开始使用类的实例或静态成员。
  7. 卸载:当类不再被使用时,JVM会回收其占用的内存。

15.对象什么时候可以被垃圾回收

  • 当对象不再被任何强引用变量直接或间接关联(即“不可达”)时,垃圾回收器会回收其占用的内存。
  • 定位垃圾的方法:
    – 引用计数法(已弃用)
    – 可达性分析算法

16.JVM垃圾回收算法有哪些?

  • 标记清除算法: 垃圾回收分为2个阶段,分别是标记和清除,效率虽然高,但是有磁盘碎片,内存不连续的缺点,现在不怎么用了
  • 标记整理算法: 标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,优点无碎片,但是因为对象需要移动,效率低,一般是老年代使用
  • 复制算法: 将原有的内存空间一分为二,每次只用其中的一块,回收时将正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收;优点是无碎片,但是内存使用率低,一般是新生代使用
  • 引用计数: 每个对象维护一个引用计数器,当引用增加时计数+1,引用消失时-1。计数为0的对象即为垃圾,直接回收。
  • 分代算法: 将堆分为新生代(Young)和老年代(Old)。新生代的对象生命周期短,频繁回收,使用复制算法(如 Eden→Survivor);老年代的对象存活率高,低频回收,使用标记-清除/整理算法。

18.详细说一说分代回收

  1. 堆的区域划分
    – 堆被分为了两份:新生代和老年代【1:2】
    – 对于新生代,内部又被分为了三个区域。Eden区,幸存者区survivor(分成from和to)【8:1:1】
  2. 对象回收分代回收策略
  • 新创建的对象,都会先分配到eden区
  • 当伊甸园内存不足,标记伊甸园与from(现阶段没有)的存活对象
  • 将存活对象采用复制算法复制到to中,复制完毕后,伊甸园和from内存都得到释放
  • 经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将其复制到from区
  • 当幸存区对象熬过几次回收(最多15次),普升到老年代(幸存区内存不足或大对象会提前普升)

19.MinorGC、Mixed GC、FullGC的区别是什么

STW: 暂停所有线程等待垃圾回收完成

  • MinorGC【young GC】发生在新生代的垃圾回收,暂停时间短(STW)
  • Mixed GC新生代+老年代部分区域的垃圾回收,G1收集器特有
  • FullGC:新生代+老年代完整垃圾回收,暂停时间长(STW),应尽力避免

20.JVM有哪些垃圾回收器

PS:回答三四个就行

  • Serial(串行收集器): 单线程,简单高效,适合单核/小内存环境,但停顿时间长。
  • Parallel(并行收集器): 多线程高吞吐,追求高效处理多核CPU下的大数据量。
  • CMS(并发标记清除): 低停顿并发回收,但内存碎片化严重,可能触发Full GC。
  • G1(Garbage-First): 分Region处理,平衡吞吐与低延迟,适合大堆内存(GB级)。
  • ZGC(Z Garbage Collector): 亚毫秒级停顿,支持TB级堆内存,超低延迟且吞吐稳定。
  • Shenandoah: 实时并发回收,消除内存碎片,低延迟且高效处理大内存。
  • Parallel Old(并行老年代): 多线程标记整理,高吞吐的老年代回收,搭配Parallel使用。
  • Serial Old(串行老年代): 单线程老年代回收,适合资源受限的小型应用。
  • ParNew: 多线程新生代回收,专为与CMS搭配实现低延迟设计。

21.详细聊一下G1垃圾回收器

核心目标: 在停顿时间可控的前提下,最大化系统吞吐量,适合大内存和多核CPU环境。

核心特点

  1. 区域化内存布局
    – 将堆内存划分为固定大小的Region(默认2048个,大小根据堆大小动态计算)。
    – 每个Region可独立属于年轻代或老年代,动态调整区域功能(如年轻代Region可转为老年代)。
    – Humongous区:专门存放大对象(超过Region半大小),避免内存碎片化。
  2. 分代收集
    – 保留分代思想,但不再物理隔离年轻代/老年代,而是通过Region集合实现。
    – 年轻代默认占堆的5%,最大可扩展到60%(通过参数-XX:G1NewSizePercent和-XX:G1MaxNewSizePercent控制)。
  3. 并发与并行
    – 并发标记:与用户线程并行执行标记阶段,减少STW(Stop-The-World)时间。
    – 并行回收:多线程处理垃圾回收,充分利用多核CPU。
  4. 垃圾优先策略(Garbage First)
    – 根据用户设定的最大停顿时间(如-XX:MaxGCPauseMillis=200),优先回收“垃圾最多”的Region,最大化单位时间垃圾回收量。
  5. 空间整合
    – 采用标记-整理算法,回收后内存连续,避免CMS的碎片化问题,支持大对象分配。
  6. 可预测的停顿时间
    – 建立停顿时间模型,通过参数控制回收目标,软实时(尽力在指定时间内完成,但不保证绝对)。

工作流程

G1的回收过程分为四个阶段,结合并发和STW阶段,降低整体停顿:

  1. 初始标记(STW): 快速标记从GC Roots直接可达的对象,记录年轻代Roots。
  2. 并发标记: 与用户线程并行,遍历所有对象,标记存活对象。
  3. 最终标记(STW): 重新处理并发标记期间变化的对象,确保标记准确。
  4. 筛选回收(STW): 根据停顿时间目标,选择垃圾最多的Region进行回收,整理内存。

注意: 当老年代不足、晋升失败或Humongous区分配失败时,可能触发Full GC

22.强引用、软引用、弱引用、虚引用的区别?

  • 强引用:只要所有GCRoots能找到,就不会被回收,new出来的都是强引用对象
  • 软引用:需要配合SoftReference使用,当垃圾多次回收,内存依然不够的时候会回收软引用对象
  • 弱引用:需要配合WeakReference使用,只要进行了垃圾回收,就会把弱引用对象回收
  • 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由ReferenceHandler线程调用虚引用相关方法释放直接内存

23.JVM调优的参数可以在哪里设置参数值

  • war包部署在tomcat中设置
    修改TOMCAT_HOME/bin/catalina.sh文件
  • jar包部署在启动参数设置
    java-Xms512m -Xmx1024m -jar xxxx.jar

24.常用的JVM调优的参数都有哪些?

  • 设置堆空间大小
-Xms512m   # 初始堆大小为512MB
-Xmx2g     # 最大堆大小为2GB
  • 虚拟机栈的设置
-Xss512k   # 每个线程的栈大小为512KB
  • 年轻代中Eden区和两个Survivor区的大小比例
-XX:NewRatio=3   # 老年代:新生代 = 3:1
-XX:SurvivorRatio=8   # Eden:Survivor = 8:1
  • 年轻代晋升老年代國值
# 对象在Survivor区中最多经历10次GC后晋升到老年代,值的范围是[0,15],默认值15
-XX:MaxTenuringThreshold=10  
  • 设置垃圾回收收集器
-XX:+UseG1GC             # 启用G1 GC
-XX:+UseParallelGC       # 启用Parallel GC(年轻代)
-XX:+UseParallelOldGC    # 启用Parallel Old GC(老年代)
-XX:+UseConcMarkSweepGC  # 启用CMS GC

25.说一下常用的JVM调优工具

命令工具

  • jps 进程状态信息
  • jstack 查看java进程内线程的堆栈信息
  • jmap 查看堆转信息
  • jhat 堆转储快照分析工具
  • jstat JVM统计监测工具

可视化工具

  • jconsole 用于对jvm的内存,线程,类的监控
  • VisualVM 能够监控线程,内存情况

26.java内存泄露的排查思路?

内存泄漏通常是指堆内存,通常是指一些大对象不被回收的情况

  1. 通过jmap或设置jvm参数获取堆内存快照dump
  2. 通过工具,VisualVM去分析dump文件,VisualVM可以加载离线的dump文件
  3. 通过查看堆信息的情况,可以大概定位内存谥出是哪行代码出了问题
  4. 找到对应的代码,通过阅读上下文的情况,进行修复即可

27.CPU飙高排查方案与思路?

  1. 使用top命令查看占用cpu的情况,查看是哪一个进程占用cpu较高
top
  1. 使用ps命令查看进程中的线程信息,查看哪个线程使用的CPU多,绩效对应tid
ps H -eo pid,tid,%cpu | grep 2266
  1. 将出问题的线程转换成十六进制,然后jstack命令查看进程中对应的线程,最终定位问题
jstack pid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海康gdb流程

gdb相关 在initrun.sh文件里加入,注意需要在hikauto起来之前 # 设置core dump大小 ulimit -c unlimited if [ $? -eq 0 ];then echo "core dump size set success" else echo -e "\33[31m core dump size set fail\33[0m" fi echo …

springBoot统一响应类型3.3版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

基于Linux下的MyBash命令解释器

项目介绍:⼀个⽤C语⾔实现的简单shell,可以接受⽤⼾输⼊的命令并执⾏操作,⽀持多管道和重 定向。 mybash---打造自己的命令解释器 目前我们Linux的系统默认的命令解释器是bash; 命令解释器(也称为命令行解释器或shell&#xff0…

Ingredient-oriented Multi-Degradation Learning for Image Restoration论文阅读

摘要:重点在于关联多个任务本质的联系。 不同恢复任务的关联性很重要。 揭示退化现象的内在机理联系很有意义。 多合一的方法能在单一模型中处理多种退化问题,可扩展性较差。 成分导向范式挖掘不同图像退化现象背后的物理规律或特征模式。 成分导向退化重…

禅道后台命令执行漏洞

漏洞简介 禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效,功能完备丰富,…

密码学——知识问答

目录 1、阐述公开密钥算法的定义,结合RSA算法说明公钥密码的基本要求。 说明公钥与私钥两种密码学并举例与其应用 1. 公钥密码学(非对称加密): 2. 私钥密码学(对称加密): 对比公钥与私钥密码…

海思烧录工具HITool电视盒子刷机详解

HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具,可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍: 功能用途 固件烧录:这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…

软考中级-软件设计师 23种设计模式(内含详细解析)

23种设计模式 🎯 创建型设计模式📌 抽象工厂(Abstract Factory) 设计模式📌 工厂方法(Factory Method)设计模式📌 单例(Singleton)设计模式📌 生成…

软考笔记5——软件工程基础知识

第五章节——软件工程基础知识 软件工程基础知识 第五章节——软件工程基础知识一、软件工程概述1. 计算机软件2. 软件工程基本原理3. 软件生命周期4. 软件过程 二、软件过程模型1. 瀑布模型2. 增量模型3. 演化模型(原型模型、螺旋模型)4. 喷泉模型5. 基于构建的开发…

Git入门——常用指令汇总

以下是一份精心整理的 Git常用指令速查表,基本覆盖日常开发使用场景,建议收藏备用👇 🔧 环境配置 指令作用git config --global user.name "你的名字"设置全局用户名git config --global user.email "你的邮箱&qu…

常见中间件漏洞攻略-Jboss篇

一、CVE-2015-7501-Jboss JMXInvokerServlet 反序列化漏洞 第一步:开启靶场 第二步:访问该接口,发现直接下载,说明接⼝开放,此接⼝存在反序列化漏洞 http://47.103.81.25:8080/invoker/JMXInvokerServlet 第三步&…

播放本地视频-实现视频画廊功能

实现一个视频画廊,播放本地视频 可以切换不同视频的功能 文章目录 需求:场景实现方案遇到的坑播放器选择界面显示不全视频友好显示问题缓存 总结 需求: 实现一个视频画廊,播放本地视频 可以切换不同视频的功能 场景 图片画廊的…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…

01 相机标定与相机模型介绍

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +

Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择

在人工智能视觉技术快速发展的今天,其应用场景正在持续拓宽,从智能安防到工业自动化,从机器人技术到智能交通,各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini,正是一款专为满足这些多样化…

K8S学习之基础五十九:部署gitlab服务

部署gitlab docker pull gitlab/gitlab-ce:latest docker tag gitlab/gitlab-ce:latest 172.16.80.140/gitlab/gitlab-ce:latest docker push 172.16.80.140/gitlab/gitlab-ce:latest docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/…

多线程 --- 多线程编程

在写代码的时候,可以使用多进程进行并发编程(在Java中,不太推荐,很多很多关于进程相关的API,在Java标准库中,都没有提供),也可以使用多线程进行并发编程(系统提供了多线程…

vue中上传接口file表单提交二进制文件流

1.使用elementui上传组件 要做一个选择文件后&#xff0c;先不上传&#xff0c;等最后点击确定后&#xff0c;把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件&#xff0c;设置auto-uploadfalse&#xff0c;也就是选择文件后不立刻上传。 <el-uplo…

C++ map容器总结

map基本概念 简介&#xff1a; map中所有元素都是pair pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09; 所有元素都会根据元素的键值自动排序 本质&#xff1a; map/multimap属于关…

【Zookeeper搭建(跟练版)】Zookeeper分布式集群搭建

&#xff08;一&#xff09;克隆前的准备 1. 用 xftp 发送文件 2. 时间同步&#xff1a; sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3. zookpeeper 安装 部署 呼应开头发送的压缩包&#xff0c;解压&#xff1a; cd ~ tar -zxvf zookeeper-3.4.6.tar.g…