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.rhkb.cn/news/248530.html

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

相关文章

Java面试架构篇【一览众山小】

文章目录 &#x1f6a1; 简介☀️ Spring&#x1f425; 体系结构&#x1f420; 生命周期 &#x1f341; SpringMVC&#x1f330; 执行流程 &#x1f31c; SpringBoot&#x1f30d; 核心组件&#x1f38d; 自动装配&#x1f391; 3.0升级 &#x1f505; spring Cloud Alibaba&am…

数字滤波器的技术指标

文章目录 幅频特性指标异 相频特性指标各型滤波器的幅度响应表征数字滤波器频率响应特性的三个参量(1) 幅度平方响应(2) 相位响应(3) 群延迟响应 数字滤波器的技术指标一般可以用幅频特性和相频特性指标来给出。 设数字滤波器的频率响应为&#xff1a; H ( e j ω ) ∣ H ( e…

多线程事务如何回滚?

背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&am…

构建基于Flask的跑腿外卖小程序

跑腿外卖小程序作为现代生活中的重要组成部分&#xff0c;其技术实现涉及诸多方面&#xff0c;其中Web开发框架是至关重要的一环。在这篇文章中&#xff0c;我们将使用Python的Flask框架构建一个简单的跑腿外卖小程序的原型&#xff0c;展示其基本功能和实现原理。 首先&…

echarts:获取省、市、区/县、镇的地图数据

目录 第一章 前言 第二章 获取地图的数据&#xff08;GeoJSON格式&#xff09; 2.1 获取省、市、区/县地图数据 2.2 获取乡/镇/街道地图数据 第一章 前言 需求&#xff1a;接到要做大屏的需求&#xff0c;其中需要用echarts绘画一个地图&#xff0c;但是需要的地图是区/县…

Linux浅学笔记03

目录 有关root的命令 用户和用户组 用户组管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户组: 删除用户组&#xff1a; 用户管理&#xff1a;&#xff08;以下需要root用户执行&#xff09; 创建用户&#xff1a; 删除用户&#xff1a; 查看用…

掌握 Android JNI 基础

写在前面 最近在看一些底层源码&#xff0c;发现 JNI 这块还是有必要系统的看一下&#xff0c;索性就写一写博客&#xff0c;加深加深印象&#x1f37b; 本文重点聊一聊一些干货&#xff0c;避免长篇大论 JNI 概述 JNI 是什么&#xff1f; 定义&#xff1a;Java Native In…

Mysql流程控制函数

任何一门语言都有顺序结构 分支结构 循环结构 流程处理函数可以根据不同的条件&#xff0c;执行不同的处理流程&#xff0c;可以在 SQL 语句中实现不同的条件选择。 MySQL 中的流程处理函数主要包括 IF() 、 IFNULL() 和 CASE() 函数。 IF(value,value1,value2)函数举例 IF…

Qt无边框窗口拖拽和阴影

先看下效果&#xff1a; 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件&#xff0c;一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

微信小程序 仿微信聊天界面

1. 需求效果图 2. 方案 为实现这样的效果&#xff0c;首先要解决两个问题&#xff1a; 2.1.点击输入框弹出软键盘后&#xff0c;将已有的少许聊天内容弹出&#xff0c;导致看不到的问题 点击输入框弹出软键盘后&#xff0c;将已有的少许聊天内容弹出&#xff0c;导致看不到的问…

算法面试八股文『 基础知识篇 』

博客介绍 近期在准备算法面试&#xff0c;网上信息杂乱不规整&#xff0c;出于强迫症就自己整理了算法面试常出现的考题。独乐乐不如众乐乐&#xff0c;与其奖励自己&#xff0c;不如大家一起嗨。以下整理的内容可能有不足之处&#xff0c;欢迎大佬一起讨论。 PS&#xff1a;…

EPSON RC 机器人-第一个程序

创建项目 有机械人且用USB线连接好。可以USB。没有真机的选择 C4 Sample 可以运行程序。 否刚会提示【不能连接到控制器&#xff0c;未安装USB驱动器】 代码 按F5打开运行窗口 再点【开始】 点 【是】&#xff0c;查看运行结果

手把手教你使用Flask搭建ES搜索引擎(实战篇)

目录 一、引言 二、准备工作 三、搭建Flask应用程序 四、创建索引并插入数据 五、运行应用程序和测试搜索功能 一、引言 随着互联网的发展&#xff0c;搜索引擎已经成为我们获取信息的重要工具。然而&#xff0c;传统的搜索引擎如Google、Baidu等&#xff0c;虽然功能强大…

C语言之刷到的怪题(i与sizeof(i)比较大小)

这个题目一般都是选择输出<。为什么呢&#xff1f;因为i是一个全局变量&#xff0c;并且没有初始化&#xff0c;那么i的值就等于0。i--之后就是-1了。而sizeof(i)求出的就是整形变量对应的大小4个字节。-1<4&#xff0c;因此就选择 输出<。其实不然&#xff0c;这个si…

1.迭代与递归 - JS

迭代与递归是函数进阶的第一个门槛。迭代就是对已知变量反复赋值变换&#xff1b;递归就是函数体内调用自身。 迭代 一个迭代是就是一个循环&#xff0c;根据迭代式对变量反复赋值。 求近似根&#xff08;切线法&#xff09;&#xff1b; 迭代描述&#xff1a; x 0 x_0 x0…

mysql之基本查询

基本查询 一、SELECT 查询语句 一、SELECT 查询语句 本文所用案例已上传资源 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT …

Servlet过滤器个监听器

过滤器和监听器 过滤器 什么是过滤器 当浏览器向服务器发送请求的时候&#xff0c;过滤器可以将请求拦截下来&#xff0c;完成一些特殊的功能&#xff0c;比如&#xff1a;编码设置、权限校验、日志记录等。 过滤器执行流程 Filter实例 package com.by.servlet;import jav…

Codeforces Round 799 (Div. 4)

目录 A. Marathon B. All Distinct C. Where’s the Bishop? D. The Clock E. Binary Deque F. 3SUM G. 2^Sort H. Gambling A. Marathon 直接模拟 void solve() {int ans0;for(int i1;i<4;i) {cin>>a[i];if(i>1&&a[i]>a[1]) ans;}cout<&l…

开源博客项目Blog .NET Core源码学习(8:EasyCaching使用浅析)

开源博客项目Blog使用EasyCaching模块实现缓存功能&#xff0c;主要是在App.Framwork项目中引用了多类包&#xff0c;包括内存缓存&#xff08;EasyCaching.InMemory&#xff09;、Redis缓存&#xff08;EasyCaching.CSRedis&#xff09;&#xff0c;同时支持多种序列化方式&am…

人脸识别技术在网络安全中有哪些应用前景?

人脸识别技术在网络安全中有广泛的应用前景。以下是一些主要的应用方向&#xff1a; 1. 身份验证和访问控制&#xff1a;人脸识别可以用作一种更安全和方便的身份验证方法。通过将用户的人脸与事先注册的人脸进行比对&#xff0c;可以实现强大的身份验证&#xff0c;避免了传统…