JVM虚拟机

1.实现软件升级.(热替换)

2.更好的防止内存泄露,提高内存的有效使用率.

3.更好提高系统的吞吐量(可以处理更大的并发)

了解JVM产品

JVM是一个虚拟机规范,基于这个规范有不同的产品,列如:

Oracle 公司HotS

JVM构成:

在JVM规范中,可能有以下:

1.类加载子系统,负责将类读到内存,校检类的合法性,对类进行初始化

2.运行时数据区(负责存储类信息-方法区,对象信息-堆或栈,执行逻辑-栈)

3.执行引擎(负责从指定地址对应的内存中读取数据然后解释执行以及GC操作)

4.本地库接口(负责实现JAVA语言与其他语言之间的协同)

类如何加载?

在JVM类中加载由类加载器负责,她会负责将类从指定

有哪些加载器

  • 获取当前类的类加载器(AppClassLoader)
  • 获取扩展类的类加载器(ExtClassLoader)
  • 获取根类加载器(BootStrapClassLoaer)
  • 自定义类加载器,可以指定类加载方式以及扩展类的加载路径(ClasslOADER)

类加载的时机

1.隐式加载(构建当前类或子类对象,访问类中属性或方法)

2.显示加载(ClassLoader.loadClass(.......))

双亲委派模型

向上询问,向下委托;当我们的类被加载时,首先会询问类加载器类对象

类加载基本过程

查找类--------读取类-------------读到字节数组后对字节数组里的内容进行效验分析,存储到方法区-------保存对象---创建字节码对象(java.lang.Class)

关于类加载静态块是否执行

关于静态代码块是否执行要看类是处初始化,初始化了静态块就会执行

JVM构成

年轻代,老年代,伊甸园和幸存区

Java对象分配内存的过程是怎样的

编译器逃逸分析(JDK8已默认开启),确定对象是在栈上分配还是在堆上分配

如果是在堆上分配,则首先检测是否可在TLAB(Thread Local Allocation Buffer) 上直接分配

如果在TLAB上无法直接分配则在Eden加锁区进行分配

-********************

如果Eden区无法存储对象,则执行Yongoing GC

如果Yongoing GC之后Eden区仍然不足以存储对象,则直接分配在老年代(当老年代内不能足时就会出现fullgc)

JVM年轻代幸存区设置比较小会有什么问题

伊甸园区对象被回收时,或者对象拷贝到幸存区,假如幸存区比较小,拷贝的对象比较大,对象想可能直接拷贝到老年代.这样会增加老年代GC的频率(老年代触发的GC我们可以简单理解为大GC或fullgc,这个过程非常慢),性能会影响,同时回收的思想就会被弱化

JVM参数

-Xms用于设置初始堆大小

-XX?:+DoEscapeAnalysis用于逃逸分析

-XX: +PrintGC输出gc信息

-Xmx128m -Xmx128m -XX:+DoEscapeAnalysis -XX: +PrinGC

JVM中有哪些垃圾回收器

串行(Serial)

并行(Parallel)

并发(CMS)

G1(收集器--逻辑上分代------但是力度会更小)

怎么进行内存调优?

看是因为什么原因需要进行内存调优

如果是因为内存不足发生的,我可以进行设置内存大小来解决,减少GC

如果内存在固定的情况下,我们可以进行判断是否内存发生了泄露,从而判断解决

GC算法

.标记清除算法

       标记清除算法应用:----适合活着的对象比较少的内存区域,这样标记的事件就会缩短,也不会产生大量碎片

步骤:

1.会对活着的对象进行标记,

2.扫描内存对未标记的对象进行清除

总共扫描俩次,耗时有点长,标记清除算法可能会长生大量的碎片

比较适合老年代,老年代对象少,这样他的碎片就少了

 标记复制算法 -----适合或者的对象比较少的内存区,年轻代

步骤

         首先会扫描内存,对活着的对象进行标记,然后将其拷贝一块的内存中,原先的内存释放,适合活着的对象比较少的内存区,年轻代

         不是活着的就是垃圾对象,提高了效率

           以空间换时间

缺点:

        这种算法会牺牲一定的空间(年轻代生命力比较弱)

 

标记整理算法

步骤:

  1.标记活着的对象

   2.把活着对象向一侧移动

    3.清理便捷外的内存区域

比较适用于老年代

 

 对于JVM中的GC操作要考虑哪些问题

  1. 判定对象为垃圾的方式(可达性分析)
  2. 回收垃圾的算法(标记清除,标记复制,标及整理)
  3. 回收垃圾的线程(单个线程,多个线程)
  4. 回收垃圾是的并行与并发(单个线程,多个线程,秉性问题,并发问题)
MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liamlf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值