返回顶部
首页 > 资讯 > 精选 >如何进行classLoader卸载与JVM热部署
  • 452
分享到

如何进行classLoader卸载与JVM热部署

2023-06-17 11:06:57 452人浏览 薄情痞子
摘要

本篇文章为大家展示了如何进行classLoader卸载与JVM热部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。classLoader的卸载机制jvm中没有提供class及classloader的

本篇文章为大家展示了如何进行classLoader卸载与JVM热部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

classLoader的卸载机制

jvm中没有提供class及classloader的unload方法.那热部署及osgi中是通过什么机制来实现的呢?实现思路主要是通过更换classLoader进行重新加载.之前的classloader及加载的class类在没有实例引用的情况下,在perm区GC的情况下会被回收掉。

perm区gc时回收掉没有引用的class是一个怎样的过程呢?

◆ perm区达到回收条件后,对class进行引用计算,对于没有引用的class进行回收。

◆ classLoader实例什么时候被回收呢?(很有可能会进入old gen).perm区回收一般情况下触发full gc是否目的就是清除没有实例引用此classloader?

内存问题

◆ 如果有实例类有对classloader的引用,perm区class将无法卸载,导致perm区内存一直增加,进而导致perm space error

public static Map pool = new HashMap(); public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ for (int i=0;i<10000000;i++){ test(args); } }  public static void test(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { ClassLoader cl = new MyLoader(Main.class.getClassLoader()); String className = "RealPerson";  @SuppressWarnings("unchecked") Class<Person> clazz = (Class<Person>) cl.loadClass(className); Person p = clazz.newInstance(); p.setName("qiang"); pool.put(System.nanoTime(), p); cl = p.getClass().getClassLoader(); }

推测:

osgi的bundle进行热部署时有个条件:export class 必须是兼容的.否则需要重启整个应用才会生效,为什么呢?

osgi的export class是被bundle的parent classloader加载的,bundle内部其他类是bundle的classloader加载的,bundle更换后,重新创建classloader,并对bundle进行加载,之前的加载靠jmv gc回收掉。

那osgi 中explort class如果有实例引用的话,是否会导致class无法被gc掉?

如果osgi中没有做过处理,应该会出现此问题.具体osgi的实现还需要深入研究下,也许osgi中关于此部分的实现使用了jvm内部的JMTI的相关接口,来对内存的引用关系进行了修改。

上述内容就是如何进行classLoader卸载与JVM热部署,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何进行classLoader卸载与JVM热部署

本文链接: https://lsjlt.com/news/288827.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行classLoader卸载与JVM热部署
    本篇文章为大家展示了如何进行classLoader卸载与JVM热部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。classLoader的卸载机制jvm中没有提供class及classloader的...
    99+
    2023-06-17
  • 如何进行centos卸载系统与环境部署
    这篇文章将为大家详细讲解有关如何进行centos卸载系统与环境部署,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。centos卸载系统已被广泛应用但是也在不断的更新。centos安装好之后ce...
    99+
    2023-06-16
  • 如何对Spring Boot与Docker进行部署
    这篇文章给大家介绍如何对Spring Boot与Docker进行部署,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开启Docker远程访问首先需要开启docker远程访问功能,以便可以进行远程操作。CentOS 6修改...
    99+
    2023-05-31
    springboot dock docker
  • 如何进行zabbix监控部署
    今天就跟大家聊聊有关如何进行zabbix监控部署,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zabbix监控  环境 centos6.7...
    99+
    2024-04-02
  • MariaDB如何进行集群部署
    在MariaDB中进行集群部署通常使用Galera Cluster来实现。Galera Cluster是一个同步多主集群解决方案,可...
    99+
    2024-04-09
    MariaDB
  • 如何进行 11.2.0.4 DG for linux 部署
    如何进行 11.2.0.4  DG for linux 部署,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 ...
    99+
    2024-04-02
  • 如何进行MySQL + Heartbeat + DRBD架构部署
    本篇文章为大家展示了如何进行MySQL + Heartbeat + DRBD架构部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、MySQL高可用生成业务需求:...
    99+
    2024-04-02
  • 如何进行Python应用容器化部署
    如何进行Python应用容器化部署,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 1. 简介Docker 是目前主流...
    99+
    2024-04-02
  • 如何在Linux上进行Golang服务部署
    这篇文章主要介绍了如何在Linux上进行Golang服务部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Linux上进行Golang服务部署文章都会有所收获,下面我们一起来看看吧。一、安装 Golang...
    99+
    2023-07-06
  • 如何在Keras中进行模型的部署
    在Keras中进行模型部署通常有两种方式:使用Keras自带的方法来保存和加载模型,或者将模型转换为TensorFlow的Saved...
    99+
    2024-03-14
    Keras
  • Vue+Koa2如何打包后进行线上部署
    这篇文章给大家分享的是有关Vue+Koa2如何打包后进行线上部署的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.将Vue和Koa2结合很多人在打完包后就不知道怎么做了,毕竟后面...
    99+
    2024-04-02
  • 如何进行mysqlhotcopy 热备工具体验与总结
    本篇文章给大家分享的是有关如何进行mysqlhotcopy 热备工具体验与总结,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天有空尝试了一下...
    99+
    2024-04-02
  • kubernetes V1.6.4 分布式集群的部署及如何进行service负载均衡
    kubernetes V1.6.4 分布式集群的部署及如何进行service负载均衡,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1,kubernetes的基本...
    99+
    2023-06-19
  • 如何进行haproxy+keepalived负载均衡主从热备功能
    本篇文章为大家展示了如何进行haproxy+keepalived负载均衡主从热备功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。VIP: 192.168.1.100 Master: 192.168...
    99+
    2023-06-10
  • 如何进行更加优雅地Docker部署项目
    本篇文章给大家分享的是有关如何进行更加优雅地Docker部署项目,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如果你需要经常性需要多处部署同样的项目,如果你曾经也遇到过&quo...
    99+
    2023-06-19
  • Linux下如何使用jenkins进行自动化部署
    这篇文章主要介绍Linux下如何使用jenkins进行自动化部署,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Jenkins是用Java语言编写的主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽...
    99+
    2023-06-28
  • Spire.Cloud如何进行私有化部署Ubuntu 18.04 系统
    这篇文章将为大家详细讲解有关Spire.Cloud如何进行私有化部署Ubuntu 18.04 系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。主要介绍如何在Ubuntu 18.04系统上实...
    99+
    2023-06-05
  • PyTorch中如何进行模型的部署和推理
    在PyTorch中进行模型的部署和推理通常有以下几个步骤: 加载已经训练好的模型: import torch import to...
    99+
    2024-03-05
    PyTorch
  • 在软件部署中如何使用strace进行调试
    这篇文章主要介绍在软件部署中如何使用strace进行调试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是 strace?strace 是一个用来“追踪系统调用”的工具。它主要是一个 Linux 工具,但是你也可以...
    99+
    2023-06-16
  • 如何利用GitLab进行多环境部署和测试
    如何利用GitLab进行多环境部署和测试引言:随着软件开发的迅猛发展,项目中常常会涉及到多个环境的部署和测试。为了简化部署流程和提高交付效率,利用GitLab进行多环境部署和测试成为了一种常见的做法。本文将介绍如何在GitLab中配置和管理...
    99+
    2023-10-25
    GitLab:版本控制 多环境部署:环境管理 测试:自动化测试
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作