JVM学习

1.Java虚拟机内部有哪些线程共享,那些线程隔离

程序计数器:

        通过改变这个计数器的值来选取下一条需要执行的字节码命令

Java虚拟机栈:

        栈,每个方法被执行时,Java虚拟机都会同步的创建一个栈帧用于存储局部变量表,操作数栈,动态连接,方法出口等信息。

本地方法栈:

        本地方法服务

堆:

        所有线程共享

方法区:

        存储已加载的类型信息:常量,静态变量,即时编译器编译后的缓存数据

        常量池:是方法区的一部分
                作用:减少重复创建和销毁,类似于缓存,提升速度

为什么有时候运行Java很卡?

大量IO操作占用本地内存

2.什么是内存溢出,栈溢出,内存泄漏?

内存溢出:创建对象内存不够

栈溢出:方法太多

内存泄漏:数据没用还占据内存倒是空间无法使用

3.如何进行JVM调优

通过Java visual VM jvisualvm.exe(位于bin目录下)

4.jvm中如何判定是否为垃圾

可达性分析算法

5.几种引用方式?

强引用:

        传统引用的定义,只要强引用关系还在,垃圾收集器就不会回收被引用的对象

软引用:

        用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,在系统将要发生内

存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存, 才会抛出内存溢出异常。

弱引用

        用来描述那些非必须对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只

能生存到下一次垃圾收集发生为止。当垃圾收集器开始工作,无论当前内存是否足够,都会回收掉只 被弱引用关联的对象。

虚引用

        一个对象是否有虚引用的 存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚 引用关联的唯一目的只是为了能在这个对象被收集器回收时收到一个系统通知。

6.垃圾收集算法目的?有哪些:

        性能损耗最低。

        标记清除算法:

                标记出所有需要回收的对象,标记完成后统一回收掉所有标记的对象,也可以反过来。

                缺点:1.执行效率不稳定,如果存在大量的需要回收的对象,那么执行效率就会降低。

                            2.内存空间碎片化。

        标记-复制算法:

                为了解决标记清除算法面对大量对象回收效率低的问题

                缺点:可用内存缩小了一半。

        标记-整理算法:

                标记过程仍然与标记-清除算法一样,但是后续由清理改为将所有存活的对象都向空间的一端移动。

这里的回收是指堆区对对象的回收

7.有哪些垃圾收集器

CMS收集器

        特点:并发收集,低停顿。依赖多核:降低CPU浪费的情况下是快的。无法处理“浮动垃圾”(在标记清除阶段因为线程还在运行,所以就会产生垃圾,但是发生在标记清除阶段之后,所以只能等到下一次处理)

Garbage First(G1)收集器

二者的区别:

CMS:垃圾收集的目标要么是老年代,要么是整个新生代

G1:面向堆内存的任何部分组成回收集,衡量标准改为内存中哪个部分存放的垃圾数量多,回收效益大。G1在小内存表现下不是很好,不如CMS。

8.介绍垃圾回收策略

大对象直接进入老年代

长期存活的对象直接进入老年代(大于15岁)

在Survivor空间中相同年龄的总和大于一半,大于或者等于改年龄的对象直接进入老年代。

9.什么情况下会触发垃圾回收?

内存满了的情况下

10.jvm调优有哪些参数

 jps:虚拟机进程状况工具

jps [ options ] [ hostid ]

jstat:虚拟机统计信息监视工具
jstat [ option vmid [interval[s|ms] [count]] ]
jinfo:Java配置信息工具
jinfo [ option ] pid
jmap:Java内存映像工具
jmap [ option ] vmid
jhat:虚拟机堆转储快照分析工具
jhat eclipse.bin //分析dump文件
jstack:Java堆栈跟踪工具
jstack [ option ] vmid

11.内存分配与回收策略

12.类加载有哪几个过程?都有什么用

13.那种情况会触发类的初始化?

 1)遇到newgetstaticputstaticinvokestatic这四条字节码指令时,如果类型没有进行过初始 化,则需要先触发其初始化阶段。

能够生成这四条指令的典型Java代码场景有:

·使用new关键字实例化对象的时候。
·读取或设置一个类型的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)
的时候。
·调用一个类型的静态方法的时候。

2)使用java.lang.reflect包的方法对类型进行反射调用的时候,如果类型没有进行过初始化,则需要先触发其初始化

3)当初始化类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
4)当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先
初始化这个主类。
5)当使用JDK 7 新加入的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果为REF_getStatic、REF_putStatic REF_invokeStatic 、REF_newInvokeSpecial四种类型的方法句柄,并且这个方法句柄对应的类没有进行过初始化,则需要先触发其初始化。
6)当一个接口中定义了JDK 8 新加入的默认方法(被default关键字修饰的接口方法)时,如果有
这个接口的实现类发生了初始化,那该接口要在其之前被初始化。

14.类加载器

        作用:寻找类,并且加载类

        如果自己写一个类加载器

/**
* 类加载器与instanceof关键字演示
*
* @author zzm
*/
public class ClassLoaderTest {public static void main(String[] args) throws Exception {ClassLoader myLoader = new ClassLoader() {@Overridepublic Class<?> loadClass(String name) throws ClassNotFoundException {try {String fileName = name.substring(name.lastIndexOf(".") + 1)+".class";InputStream is = getClass().getResourceAsStream(fileName);if (is == null) {return super.loadClass(name);}byte[] b = new byte[is.available()];is.read(b);return defineClass(name, b, 0, b.length);} catch (IOException e) {throw new ClassNotFoundException(name);}}};Object obj =     myLoader.loadClass("org.fenixsoft.classloading.ClassLoaderTest").newInstance();System.out.println(obj.getClass());System.out.println(obj instanceof org.fenixsoft.classloading.ClassLoaderTest);}
}

15.通过什么方式寻找这个类

        双亲委派模型

        在哪里破坏双亲委派?tomcat

16.什么是热部署?

再不清空内存的情况下,不重启的情况下,更新内存中的类信息

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

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

相关文章

java 实现微信公众号关键字自动回复

接上一篇内容https://blog.csdn.net/YISHENGYOUNI95/article/details/134383219 因为设置了公众号的服务器配置&#xff0c;导致之前设置的公众号自动回复失效了 需要通过之前配置的接口实现自动回复 参考一下官方文档回复文本消息 | 微信开放文档 根据用户发送的消息&#…

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…

Jedis连接池究竟是何物?

一、前言 连接池的用途实际上有过开发经验的朋友都已经比较清楚了&#xff0c;当资源对象的创建/销毁比较耗时的场景下&#xff0c;可以通过"池化"技术&#xff0c;达到资源的复用&#xff0c;以此来减少系统的开销、增大系统吞吐量&#xff0c;比如数据库连接池、线…

雍禾植发:“地球生发计划”修复荒漠化土地超百万平方米

日前&#xff0c;雍禾植发宣布“毛发森林•地球生发计划”从正式发起到2023年11月19日秋季造林结束&#xff0c;已经在内蒙古自治区额济纳旗东风镇额很查干嘎查种下60000棵树&#xff0c;修复荒漠化土地超过102.01万平方米。 作为此次公益活动的“落脚地”,额济纳旗地处内蒙古…

Swift Vapor 教程(项目创建)

The future of web development. 在初次接触 Swift Vapor 时&#xff0c;感觉代码比较清爽&#xff0c;用起来逻辑比较清晰。 困难点&#xff1a; Swift Vapor 使用了JWT管理三方库&#xff0c;比较吃网络Swift Vapor 搭建环境比较复杂初次使用Swift Vapor 尽量不要使用MySql。…

Linux内存常用命令指标详解

1. free rootnode02:~# free -m total used free shared buff/cache available Mem: 3919 1194 1738 1 986 2446 Swap: 0 0 0free 输出的是一个表格&#xff0c;其中…

网页版idea、pycharm搭建

官网教程提供了两种方法&#xff1a;1、有给应用版idea或pycharm安装插件来开放网页服务&#xff1b;2、使用docker创建容器开放网页服务。这边推荐并介绍第二种步骤。 基本过程为&#xff1a;拉取相关镜像&#xff1b;开启服务&#xff1b;使用网页版 &#xff08;细节和注意点…

3D数据转换器HOOPS Exchange如何获取模型的几何数据? 干货预警!

一、概述 前面讲解过模型在内存中的结构&#xff0c;现在回顾一下&#xff0c;当模型导入成功后&#xff0c;整个模型数据会以原生结构的 PRC 组装树形式存放到内存中。&#xff08;申请 HOOPS Exchange 试用&#xff09; PRC结构的主要类型包含四种&#xff0c;分别是…

Qt 调用系统键盘

Wow64DisableWow64FsRedirection(&pvoid) 函数用于禁用 32 位 Windows 程序对文件系统重定向的支持。它将禁用文件系统重定向&#xff0c;以便在运行 32 位应用程序时&#xff0c;可以访问 64 位系统目录。pvoid 是一个指向先前启用的文件系统重定向状态的指针。 构建了要…

(2)(2.10) LTM telemetry

文章目录 前言 1 协议概述 2 配置 3 带FPV视频发射器的使用示例 4 使用TCM3105的FSK调制解调器示例 前言 轻量级 TeleMetry 协议 (LTM) 是一种单向通信协议&#xff08;从飞行器下行的数据链路&#xff09;&#xff0c;可让你以低带宽/低波特率&#xff08;通常为 2400 波…

ElasticSearch 应用实践 笔记

概述 介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。ElasticSearch的底层是开源库Lu…

【Golang】ModbusRTU协议CRC16校验算法

CRC校验码是通过在数据后面附加一个短的校验序列来生成的&#xff0c;用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法&#xff0c;它生成一个16位的校验码。 下面是使用Go语言实现CRC16校验算法的代码&#xff1a; package main import ("encoding…

npm安装下载修改镜像源

问题描述一 npm install 时&#xff0c;报错&#xff1a;npm ERR! network request to https://registry.npmjs.org/postcss-pxtorem failed, reason: connect ETIMEDOU&#xff0c;这是因为默认npm安装会请求国外的镜像源&#xff0c;导致下载缓慢容易断开请求下载失败的 np…

【正点原子STM32】IWDG 独立看门狗(简介、工作原理、IWDG寄存器配置操作步骤、IWDG溢出时间计算、IWDG配置步骤、独立看门狗流程)

一、IWDG简介 IWDG有什么作用&#xff1f; 二、IWDG工作原理 三、IWDG框图 四、IWDG寄存器 键寄存器&#xff08;IWDG_KR&#xff09;预分频器寄存器 (IWDG_PR)重装载寄存器(IWDG_RLR) 状态寄存器(IWDG_SR) 寄存器配置操作步骤 五、IWDG溢出时间计算 IWDG溢出时间计算公式…

【脑电信号处理与特征提取】P5-彭薇薇:脑电信号的预处理及数据分析要点

彭薇薇&#xff1a;脑电信号的预处理及数据分析要点 脑电 脑电是神经活动的测量方法&#xff0c;在不同位置测量有不同的方法。比如大脑皮层表面测量的是ECoG&#xff0c;在头皮测量的是EEG。除了EEG是无损的&#xff0c;其他都是有损的。 脑电信号采集系统 下面是完整的…

泰迪智能科技生成式人工智能(AIGC)实验室解决方案

AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;生成式人工智能&#xff09;是一种新的人工智能技术&#xff0c;指的是利用人工智能技术来生成内容。这种技术可以自动生成文本、图像、音频和视频等多种类型的内容&#xff0c;而且内容的质量较高&…

elasticsearch在ubuntu下的配置以及简单使用

参考资料 官方下载地址 ELK学习实验002&#xff1a;Elasticsearch介绍及单机安装 ElasticSearch (ES从入门到精通一篇就够了) 前言 警告&#xff1a;elasticsearch默认不允许使用root账号来运行的&#xff0c;所以&#xff0c;强烈建议一开始就创建一个账号例如&#xff1a;…

Java关于Excel文件的导入导出

人生如梦 荣华富贵 如木槿之花 朝荣夕逝 需求 导出&#xff1a; 能够将库表内的数据导出多个Excel表&#xff0c;并且生成一个压缩包&#xff0c;提供用户下载导入&#xff1a; 能够将一个压缩包内的多个Excel表解压&#xff0c;并获取表内的所有数据 FileUtils 工具类 publi…

【开发】长期项目与代码质量,对抗软件工程复杂度(设计、重构、规范)

【开发】长期项目与代码质量&#xff0c;对抗软件工程复杂度&#xff08;设计、重构、规范&#xff09; 文章目录 一、设计模式与设计原则二、历史债务与代码重构1、技术债务的来源2、重构—无奈之举3、工程一致性&#xff1a;有效控制技术债务积累的主要手段 一、设计模式与设…

基于ssm和微信小程序的健身房私教预约管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…