(元空间内存爆炸)Java Metaspace无限制增长的真相与3步紧急应对法

第一章:Java Metaspace无限制增长的真相

在Java 8及更高版本中,永久代(PermGen)被元空间(Metaspace)取代,用于存储类的元数据。尽管Metaspace默认使用本地内存并可动态扩展,但在某些场景下会出现无限制增长的问题,进而导致系统内存耗尽。

Metaspace的工作机制

Metaspace将类元信息存储在本地内存中,而非JVM堆内。当应用程序加载大量类(如动态生成类、使用反射或OSGi等模块化框架)时,Metaspace会自动扩容。但若未设置上限,可能导致内存滥用。
  • JVM默认不限制Metaspace大小(-XX:MaxMetaspaceSize未配置)
  • 类加载器泄漏会导致已加载的类无法卸载
  • 频繁的动态类生成(如CGLIB、ASM)加剧内存压力

监控与诊断方法

可通过JVM内置工具观察Metaspace使用情况:
# 查看指定进程的Metaspace使用
jstat -gc <pid>
# 输出示例字段:MCMN, MCMX, MC, MU(分别表示最小、最大、当前、已用Metaspace容量)

# 开启GC日志以追踪Metaspace变化
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log

控制Metaspace增长的策略

为避免内存失控,应显式设置Metaspace上限:
// 推荐JVM启动参数
-XX:MaxMetaspaceSize=512m   # 限制最大元空间大小
-XX:MetaspaceSize=256m      # 初始阈值,达到后触发首次GC
-XX:+UseConcMarkSweepGC     # 配合CMS收集器减少停顿
参数作用建议值
-XX:MaxMetaspaceSize限制Metaspace最大内存256m~1g(依应用规模)
-XX:MetaspaceSize触发Full GC的初始阈值128m~256m
graph TD
    A[类加载] --> B{Metaspace是否满?}
    B -- 是 --> C[触发Full GC]
    C --> D{能否回收?}
    D -- 否 --> E[扩容Metaspace]
    D -- 是 --> F[释放空间]
    E --> G[检查MaxMetaspaceSize]
    G -- 超限 --> H[OutOfMemoryError: Metaspace]

第二章:Metaspace内存机制深度解析

2.1 Metaspace的内存结构与类加载关系

Metaspace内存区域划分
Java 8引入Metaspace替代永久代,其内存从本地内存分配,主要分为**Class Metadata**和**Runtime Constant Pool**两部分。类元数据存储类结构、方法、字段等信息,由类加载器在加载类时填充。
  • 每个类加载器独立维护元数据空间
  • Metaspace自动扩展以避免OutOfMemoryError
  • 可通过JVM参数控制大小:-XX:MaxMetaspaceSize
类加载与Metaspace的关联机制
当ClassLoader加载一个类时,JVM在Metaspace中为其分配内存存储元数据。不同类加载器隔离元数据,卸载类时触发垃圾回收。

-XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=256m
上述参数设置初始和最大元空间大小。若未指定,Metaspace将动态扩展直至系统内存耗尽。该机制有效缓解了永久代时代因固定大小导致的java.lang.OutOfMemoryError: PermGen问题。

2.2 类元数据存储原理与空间分配机制

在JVM中,类元数据(Class Metadata)存储于元空间(Metaspace)中,取代了早期永久代的实现。元空间位于本地内存,避免了堆内存的限制。
元空间的动态分配机制
  • 类元数据按类加载器隔离分配,每个加载器对应独立的内存区块
  • 采用Klass结构体描述类信息,包含方法、字段、注解等元数据指针
  • 通过虚拟内存映射实现按需提交物理内存
关键参数配置
参数作用
-XX:MetaspaceSize初始元空间大小
-XX:MaxMetaspaceSize最大元空间容量

// HotSpot中Klass结构简化示意
class Klass {
  oop _java_mirror;        // 对应Java类对象
  const char* _name;       // 类名字符串
  Klass* _super;           // 父类指针
  MethodArray _methods;    // 方法元数据数组
};
该结构在类加载时由JVM解析.class文件构建,所有元数据通过指针关联,实现快速查找与动态卸载。

2.3 元空间与永久代的本质区别剖析

内存区域的物理位置差异
永久代(PermGen)是JVM堆内存的一部分,受限于堆大小配置,常因元数据过多引发 java.lang.OutOfMemoryError: PermGen space。而元空间(Metaspace)从JDK 8开始取代永久代,其数据存储移至本地内存(Native Memory),仅受系统可用内存限制。
动态扩展与垃圾回收优化
元空间支持自动扩容,通过以下参数控制:
  • MetaspaceSize:初始元空间大小
  • MaxMetaspaceSize:最大元空间容量(默认无上限)
  • MinMetaspaceFreeRatio 和 MaxMetaspaceFreeRatio:触发GC的空闲比例阈值
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1024m
该配置设定元空间初始为256MB,最大不超过1024MB,避免无节制占用系统资源。
类元数据管理机制演进
元空间使用类加载器粒度的内存管理,结合Klass结构体直接映射C++对象,提升反射和动态代理性能。相较之下,永久代采用固定大小的连续内存块,易产生碎片且难以回收。

2.4 触发Metaspace扩容的条件与阈值

JVM在运行时若发现Metaspace空间不足,会根据当前已使用空间与阈值比较决定是否扩容。
核心触发条件
  • 加载新类导致Metaspace使用量超过当前阈值(MetaspaceSize)
  • 未达到最大限制(MaxMetaspaceSize)
  • 垃圾回收后仍无法释放足够空间
JVM参数配置示例
-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=512m
该配置表示初始Metaspace大小为64MB,最大不超过512MB。当类元数据使用量超过64MB时,JVM将触发扩容,直至达到上限。
动态阈值调整机制
JVM通过GC周期评估Metaspace使用趋势,自动调整下次扩容时机,避免频繁触发。

2.5 动态扩展背后的JVM底层行为

当Java应用运行时,对象不断创建导致堆内存压力增大,JVM通过动态扩展堆空间来维持运行。这一过程由垃圾回收器与内存管理子系统协同完成。
内存分配与扩张触发条件
JVM初始堆大小由-Xms设定,最大值由-Xmx控制。当现有堆无法满足对象分配需求时,JVM尝试触发GC;若回收后仍不足,则在不超过-Xmx的前提下扩展堆。
// 示例:对象连续分配触发扩容
for (int i = 0; i < 1000000; i++) {
    byte[] data = new byte[1024]; // 每次分配1KB
}
上述代码持续申请内存,可能触发多次Young GC和Full GC,最终促使JVM扩展老年代空间。
关键内部机制
  • 内存池(Memory Pool)动态调整各代区域大小
  • GC线程与应用线程并发协调,减少停顿
  • 使用卡表(Card Table)和写屏障维护跨代引用

第三章:Metaspace溢出的典型场景分析

3.1 大量动态类生成导致内存膨胀实战案例

在某大型电商平台的订单处理系统中,使用了基于字节码增强的框架(如CGLIB)为每个订单类型动态生成代理类。随着业务扩展,订单子类型激增,导致JVM元空间(Metaspace)持续增长。
问题表现
系统运行数日后频繁触发Full GC,Metaspace使用率接近上限,堆转储分析显示成千上万个动态生成的类实例未被卸载。
代码示例

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(OrderService.class);
enhancer.setCallback(new DynamicInterceptor());
Class proxyClass = enhancer.create(); // 每次调用生成新类
上述代码在运行时不断创建新的类,而类加载器未被回收,导致元空间泄漏。
优化方案
  • 引入类缓存机制,复用已生成的代理类
  • 改用接口代理(JDK Proxy),减少类生成数量
  • 设置合理的Metaspace大小并启用类卸载监控

3.2 使用反射或字节码增强引发的元空间泄漏

在Java应用中,频繁使用反射或字节码增强(如CGLIB、ASM、Javassist)可能动态生成大量类,这些类加载到元空间(Metaspace),若未及时卸载,将导致元空间内存泄漏。
常见触发场景
  • Spring AOP使用CGLIB代理时生成大量子类
  • ORM框架动态生成实体访问器
  • 反射调用包含Class.forName频繁加载新类
代码示例:CGLIB动态类生成

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Service.class);
enhancer.setCallback((MethodInterceptor) (obj, method, args, proxy) -> 
    proxy.invokeSuper(obj, args));
Object proxy = enhancer.create(); // 每次create可能生成新类
上述代码每次执行可能创建新的代理类,由不同的ClassLoader加载,导致元空间持续增长。若类加载器未被回收,其加载的类元数据也无法释放。
监控与预防
可通过JVM参数控制元空间行为:
参数作用
-XX:MaxMetaspaceSize限制元空间最大容量
-XX:+CMSClassUnloadingEnabled启用类卸载(需配合CMS或G1)

3.3 不当的类加载器设计造成的累积问题

在复杂的Java应用中,类加载器的设计直接影响系统的稳定性与资源管理效率。不当的类加载策略可能导致类重复加载、内存泄漏甚至NoClassDefFoundError异常。
常见问题表现
  • 相同类被不同类加载器重复加载,浪费堆空间
  • 自定义类加载器未正确隔离命名空间,引发冲突
  • 未释放对类加载器的引用,导致Metaspace无法回收
典型代码示例

public class LeakyClassLoader extends URLClassLoader {
    public LeakyClassLoader(URL[] urls) {
        super(urls);
    }
    // 忘记重写close()方法或未显式调用
}
上述代码若频繁创建实例且未关闭,将导致Metaspace持续增长。每个URLClassLoader持有已加载类的引用,JVM无法卸载这些类,最终引发OutOfMemoryError: Metaspace。
优化建议
应遵循双亲委派模型,合理复用类加载器实例,并实现资源自动释放机制。

第四章:三步紧急应对与调优实践

4.1 第一步:设置合理初始与最大元空间大小

在Java 8及以后版本中,元空间(Metaspace)取代了永久代,用于存储类的元数据。合理配置初始与最大元空间大小可有效避免频繁GC或内存溢出。
关键JVM参数配置

-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
上述参数分别设置元空间的初始大小为256MB,防止早期触发垃圾回收;最大大小限制为512MB,避免元数据占用过多本地内存导致系统不稳定。
参数影响分析
  • MetaspaceSize:触发首次元空间GC的阈值,设为256m可减少初始化阶段的GC次数;
  • MaxMetaspaceSize:硬性上限,防止内存无限制增长,推荐根据应用类数量设定。
对于大型应用,若加载类超过数万,应适当调高上限并监控元空间使用情况。

4.2 第二步:启用GC策略优化元数据回收效率

在大规模对象存储系统中,元数据的高效回收直接影响系统长期运行的稳定性。通过调整垃圾回收(GC)策略,可显著提升元数据清理效率。
配置示例与参数解析

gc:
  strategy: "tiered"
  interval: 300s
  threshold: 75%
  metadata_ttl: 86400s
上述配置采用分层回收策略(tiered),每5分钟执行一次扫描,当内存使用超过75%时触发深度回收,元数据保留时间为24小时。
策略优势对比
  • 标记-清除:简单但易产生碎片
  • 引用计数:实时性强但开销大
  • 分层策略:结合冷热数据区分,降低延迟
该机制有效减少元数据堆积,提升集群整体响应速度。

4.3 第三步:监控Metaspace运行状态并预警

为了防止Metaspace内存溢出导致JVM崩溃,必须对其运行状态进行持续监控,并设置合理的预警机制。
JVM内置监控工具使用
可通过JMX或jstat命令实时查看Metaspace使用情况:
jstat -gcutil <pid> 1000
该命令每秒输出一次GC统计,重点关注M(Metaspace使用率)和CCS(压缩类空间)指标。
关键监控指标表格
指标名称含义预警阈值
Metaspace Usage已使用的非堆内存>85%
Compacting Space压缩类空间占用>90%
结合Prometheus与Micrometer可实现自动化告警,及时发现类加载泄漏风险。

4.4 综合调优参数配置建议与生产验证

在高并发场景下,合理配置JVM与数据库连接池参数是保障系统稳定性的关键。建议结合实际负载进行动态调优。
JVM调优核心参数

-XX:+UseG1GC 
-XX:MaxGCPauseMillis=200 
-XX:G1HeapRegionSize=16m 
-Xms4g -Xmx4g
上述配置启用G1垃圾回收器,控制最大暂停时间在200ms内,堆内存固定为4GB以避免动态扩容开销,适用于延迟敏感型服务。
数据库连接池配置建议
参数推荐值说明
maxPoolSize20避免过多连接导致数据库压力激增
connectionTimeout3000ms防止请求长时间阻塞

第五章:从根源杜绝Metaspace隐患的长期策略

建立类加载监控机制
在生产环境中,动态类生成(如CGLIB、反射框架)可能导致Metaspace持续增长。通过引入字节码增强工具或JMX监控,可实时追踪类加载行为。例如,使用Java Agent注册类加载监听器:

public class ClassLoadMonitorAgent {
    public static void premain(String args, Instrumentation inst) {
        inst.addTransformer((classLoader, className, cl, pd, bc) -> {
            System.out.println("Loaded: " + className);
            return bc;
        });
    }
}
优化第三方库依赖管理
部分框架(如Spring Boot、Hibernate)默认启用运行时代理,频繁生成新类。应评估并关闭非必要功能,例如:
  • 禁用Hibernate的字节码增强代理(hibernate.bytecode.use_reflection_optimizer)
  • 限制Spring AOP自动代理范围,避免全包扫描
  • 定期审查依赖树,移除冗余库(mvn dependency:tree)
实施Metaspace容量规划
根据应用类型设定合理的Metaspace上限与初始值。以下为典型微服务配置建议:
应用类型-XX:MetaspaceSize-XX:MaxMetaspaceSize
轻量API服务64m256m
集成中间件96m512m
构建CI/CD中的内存合规检查
在构建流程中嵌入静态分析工具(如SpotBugs、Checkstyle),检测潜在的类加载滥用模式。同时,在性能测试阶段采集Metaspace增长趋势,结合Grafana+Prometheus实现阈值告警。
监控 → 告警 → 分析 → 修复 → 验证

相关推荐

DeepSeek V3与R1双引擎实战指南:工作流提效与认知升级

DeepSeek作为国产大模型代表,正重塑普通人处理信息、构建知识和产出成果的基础能力。其核心价值不在于替代人类思考,而在于突破人类在模式匹配、长文本分析与确定性推理上的生理瓶颈。V3凭借128K上下文与中文语义保真能力,擅长复杂文档理解、多轮逻辑推演与结构化输出;R1则聚焦代码生成、数学推导与API级精准推理,具备可验证、可追溯的技术确定性。二者协同可覆盖信息输入、知识加工、成果输出三大关键工作流节点,在技术开发、学术研究、内容运营与个人管理等场景中实现从‘低阶搬运’到‘高阶设计’的认知跃迁。

dianqi0560的博客 346

JVM元数据空间增长分析

上一篇已经分析了(https://mp.youkuaiyun.com/postedit/102959321)JVM除了HEAP还有哪些内存占用,也进行了一部分的参数调优,但是并没有根本解决这个问题 ,只是发生内存占满的时间变长了一些。 上章的策略:1.减少xss占用 2.减少不必要的线程占用(主要集中在es线程,参数transport.netty.worker_count) 使用jcmd命令已经发现jv...

chenlin597898889的博客 1656

企业级技术选型的三重现实约束:组织、遗留系统与业务重力

技术选型不是编程语言或框架的性能比拼,而是面向真实工程场景的系统性决策。其底层逻辑始于对软件平台本质的理解——它需承载组织能力水位、适配遗留系统引力场、响应业务场景的重力加速度。.NET与Java生态差异的关键不在语法糖或GC参数,而在于Windows运维惯性与Linux云原生基建的协同成本、OPC UA/SAP RFC等协议兼容性、以及高瞬时负载或长周期稳定等业务重力下的响应函数。本文穿透async/await与CompletableFuture的语义鸿沟、IServiceProvider与Applica

ciyinzhi8788的博客 472

jvm的元空间溢出案例及解决办法,给出详细例子

元空间溢出频繁动态生成类:例如使用大量代理类(如 Spring AOP 或 CGLIB 生成的动态代理)。类加载器泄露:类加载器无法被回收,导致其加载的类无法被卸载。超过元空间大小限制:元空间的最大大小由 JVM 参数控制,若内存不足以容纳更多的类元数据,会导致错误。增加元空间大小:调整 JVM 参数来增加元空间的最大值。避免类加载器泄漏:检查类加载器的使用,确保类加载器可以被正确回收。减少动态类生成:优化动态代理代码,避免频繁地生成不必要的类。监控元空间使用。

weixin_39304656的博客 1817

用XGBoost做服务性能预测:轻量建模与工程落地实践

服务性能预测是现代可观测性体系的关键能力,其本质并非黑盒时序预测,而是基于多层基础设施、运行时、中间件与业务指标的可解释性异常前兆识别。核心原理在于分层归因建模与轻量算法选型——XGBoost凭借低延迟推理、特征重要性可解释、对缺失值鲁棒等优势,在CPU/内存/GC/Redis/Kafka等关键指标组合下,实现分钟级故障预警。该技术显著提升SRE与后端工程师的事前干预能力,已广泛应用于电商、本地生活与金融风控等高并发场景,支撑日调用量超8亿次的稳定性保障体系。

dilv4062的博客 357

Agent记忆处理机制:结构化、可演化、上下文感知的认知存档系统

Agent记忆不是简单缓存或变量存储,而是面向目标行为的结构化认知存档系统——它融合语义锚点、时间戳与置信度,在短期工作记忆、中期情景记忆和长期语义记忆三层间动态调度。其核心原理在于解决上下文即时性、任务跨轮次状态沉淀与资源有限性三重矛盾,技术价值体现为降低Token成本、避免语义稀释、保障并发隔离与确定性清理。典型应用场景包括多轮对话订单构建、工业巡检状态追踪及电商导购偏好沉淀。本文聚焦Python级落地实践,深入解析ContextVar、dataclass与内存注册表等关键载体。

weixin_34318326的博客 285

Java JVM调优必知必会(Metaspace内存管理核心技术大揭秘)

深入解析Java JVM元空间内存管理,有效预防和解决Java JVM元空间(Metaspace)溢出问题。涵盖类加载机制、Metaspace参数调优与监控方法,适用于高并发与微服务场景,提升系统稳定性。掌握核心技术,值得收藏。

CodeIsle的博客 397

【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等

不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区/*** 查看直接内存的占用与释放*///1GB//直接分配本地内存空间。

dopapapa的博客 1615

JVM面试真题解析:从内存结构到GC诊断的工程化能力

JVM是Java后端工程师的核心基础能力,其本质是运行时资源管理与故障归因系统。理解JVM需超越堆、栈、方法区等静态概念,深入内存分代设计原理(如新生代的‘快速淘汰’逻辑、元空间的类模板管理机制),掌握GC行为与真实指标的映射关系(如jstat中OU/MU/YGCT的业务含义),并具备在无完整监控条件下定位OOM、CPU飙升、RSS异常等典型问题的工程化路径。尤其需关注非堆内存(Direct Memory、Metaspace)引发的隐形泄漏,以及ZGC/G1等现代收集器在停顿控制、并发标记、重定位等环节的真

weixin_34054866的博客 199

银河麒麟V10-ARM架构-postgresql安装与部署指南

本文详细介绍应用源码进行pgsql的安装步骤,本文以postgresql-12.0为例。提示:以下是本篇文章正文内容,下面案例可供参考银河麒麟系统安装程序比较繁琐,潜在问题比较多,个人建议均通过源码自定义编译安装。国产系统还需努力啊!

idols_man的博客 1万+

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 750

JVM垃圾回收原理与实战:从可达性分析到ZGC调优

Java垃圾回收(GC)是JVM内存管理的核心机制,其本质基于可达性分析判定对象生死,并依托分代假设优化回收效率。理解GC Roots构成、四类引用强度及堆内存分代逻辑,是定位内存泄漏与OOM的根本前提;而G1、ZGC等现代回收器则通过Region化设计、染色指针与读屏障等技术,在吞吐量与低延迟间动态权衡。本文聚焦真实生产场景——如年轻代存活率飙升、老年代持续增长、GC停顿突增等典型问题,结合GC日志解析、参数调优与代码级修复(如WeakHashMap替代静态强引用),提供可落地的排查路径与工程实践方案。

weixin_33984032的博客 421

HID报告描述符实战解析:从Usage到Item的完整设计流程

本文深入解析了HID报告描述符的设计流程,从核心概念Usage(用途定义)入手,详细阐述了如何通过Item(条目)的三种角色——全局、局部与主干,构建出能被系统正确识别的设备“说明书”。文章以标准USB鼠标和键盘为例进行实战拆解,并介绍了使用Report ID与自定义设备等进阶设计方法,帮助开发者掌握这一实现USB设备即插即用的关键技术。

weixin_29230865的博客 281

Java Metaspace配置陷阱(90%开发者忽略的关键参数)

掌握Java Metaspace的大小限制配置技巧,避免频繁Full GC和内存溢出。适用于高并发、类加载频繁的应用场景,详解MaxMetaspaceSize等关键参数调优方法,提升系统稳定性,值得收藏。

ProceNest的博客 778

电子设计实战:用MOS管手把手搭建D触发器电路(含时序分析避坑指南)

本文详细介绍了如何使用MOS管从零开始搭建D触发器电路,重点解析了建立时间和保持时间等关键时序参数对电路稳定性的影响。通过实测波形分析和避坑指南,帮助电子工程师掌握D触发器的实际搭建技巧与优化方法,提升数字电路设计的可靠性。

x1y2z的博客 1159

Visual Studio 2022调试Godot 4 C#项目全攻略:从环境配置到断点调试

本文详细介绍了如何配置Visual Studio 2022以高效调试Godot 4 C#项目。从环境搭建、外部编辑器设置到两种核心调试模式(附加到进程与启动配置)的实战指南,帮助开发者构建无缝的工业级工作流,解决编码乱码、断点失效等常见问题,大幅提升开发与问题排查效率。

bush的博客 391

转:记一次java应用内存不断增长问题解决过程

记一次java应用内存不断增长问题解决过程 版权声明:本文为转载文章,遵循 CC 4....

weixin_42045234的博客 2470

【晶振专题】晶振学习笔记——ST AN2867应用手册 2

通过学习AN2867设计指南,我们知道皮尔斯晶振的基本知识。也了解了晶振的负载电容计算方法、安全因子测试方法和反馈电阻的作用。

一点硬件 1364

记一次JDK8的Metaspace区域的调优过程,及MetaspaceSize参数的误解

JDK8用metaSpace区域来代替了以前的永久区,这个区域主要存放被加载的class信息,我手上一个项目每次启动时候都会伴随一次fullgc,排查思路是: 一、查看内存使用率 命令:jstat -gcutil PID ,这里的PID是Java进程ID 可以看到老年代使用率只有1.96%,但是MetaSpace区域使用率是96.13%,初步怀疑是metaSpace区域设置太小。 二、查看gc日...

肆頭的博客 1万+

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

订阅智能体进阶(2)。不用爬虫,直接提取网页信息。从RunSubscription分离出AddSubscriptionTask的action,并且让SubscriptionRunner单独运行。

同学小张的博客 1587

模拟量输入功能块 S_ITR(Easy系列PLC完整ST源代码)

IN Input INT 输入数字量 1IN ISH INT 输入数字量上限 2IN ISL INT 输入数字量下限 3IN OSH REAL 输出工程量上限 4IN OSL REAL 输出工程量下限 5OUT OUTPUT REAL 输出工程量 6VAR temp1 REAL 临时变量1 7VAR temp2 REAL 临时变量2 8。

RXXW_Dor的博客 716

JAVA 8 :从永久区(PermGen)到元空间(Metaspace)

本文系翻译:原文地址 你注意到了吗?JDK 8早期可访问版本已经提供下载了,java 开发人员可以使用java 8 提供的新的语言和运行特性来做一些实验。其中一个特性就是完全的移除永久代(Permanent Generation (PermGen)),这从JDK 7开始Oracle就开始行动了,比如:本地化的String从JDK 7开始就被移除了永久代(Permanent Generati...

iteye_17060的博客 3382

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java元空间扩容_JVM元空间(Metaspace)

从方法区(PermGen)到元空间(Metaspace)方法区(PermGen)JDK1.8以前的HotSpot JVM有方法区,也叫永久代(permanent generation)。方法区用于存放已被虚拟机加载的类信息、常量、静态变量,即编译器编译后的代码。方法区是一片连续的堆空间,通过-XX:MaxPermSize来设定永久代最大可分配空间,当JVM加载的类信息容量超过了这个值,会报OOM:...

weixin_34221654的博客 1388

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java8 Metaspace调优

转载自:https://blog.youkuaiyun.com/bolg_hero/article/details/78189621   由于服务器在运行一段时间后出现fullgc,最终定位到是由于metaspace引起fullgc,不断的fullgc又占用大量cpu导致程序最终不可用。 查看JVM配置 -Xms1000m -Xmx1000m -XX:MaxNewSize=256m -XX:ThreadSta...

ZERO 7587
上一篇: 为什么资深架构师都在用try-with-resources?真相令人震惊
下一篇: 【Java 14 NPE 深度解析】:揭秘空指针异常全新诊断机制及最佳避坑策略
CodeWhim
博客等级 码龄1年 153粉丝 2003原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值