问题(摘要)

大量的类加载器 sun/reflect/DelegatingClassLoader,用来加载sun/reflect/GeneratedMethodAccessor类,可能导致潜在的占用大量本机内存空间问题。

症状

应用服务器进程占用的内存会显著增大。您还有可能遇到抛出的内存溢出错误。

原因

当使用Java反射时,Java虚拟机有两种方法获取被反射的类的信息。它可以使用一个JNI存取器。如果使用Java字节码存取器,则需要拥有它自己的Java类和类加载器(sun/reflect/GeneratedMethodAccessor类和sun/reflect/DelegatingClassLoader)。这些类和类加载器使用本机内存。字节码存取器也可以被JIT编译,这样会增加本机内存的使用。如果Java反射被频繁使用,会显著地增加本机内存的使用。

Java虚拟机会首先使用JNI存取器,然后在访问了同一个类若干次后,会改为使用Java字节码存取器。这种当Java虚拟机从JNI存取器改为字节码存取器的行为被称为膨胀。幸运的是,我们可以通过一个Java属性控制这种行为。属性sun.reflect.inflationThreshold会告诉Java虚拟机使用JNI存取器多少次。如果设为0,则总是使用JNI存取器。由于字节码存取器比JNI存取器使用更多本机内存,当我们看到大量Java反射时,最好使用JNI存取器。我们只需要设置inflationThreshold属性值为0即可。

诊断问题

如果在javacore或heapdump中有大量sun/reflect/DelegatingClassLoader类加载器,您可能遇到了此问题。

解决问题

设置Java属性sun.reflect.inflationThreshold值为0。

1. 访问WebSphere应用程序服务器管理控制台
服务器 > 应用程序服务器 > 服务器名称
2. 在服务器基础结构部分,展开Java和进程管理,选择进程定义
3. 在其他属性部分选择Java虚拟机,在通用JVM参数输入框里添加以下字符串
-Dsun.reflect.inflationThreshold=0
4. 点击“确定”,保存至主配置。
需要重启应用程序服务器使设置生效。

相关信息

1566549

使用反射代理类加载器的潜在内存使用问题相关推荐

  1. 反射,类加载器,动态代理

    反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.即 将字节 码文件(class文件)封装成对象(Class对象),并将字节码文件(class文件所对应的类)中的内容(方法和属性)都封 ...

  2. 反射-注解-类加载器知识

    反射知识 概念 反射机制就是将类的各个组成部分(属性,方法,构造器)封装为其他对象 Class Method Constructor 相关的核心类 java.lang.Class(这个就是类的对象) ...

  3. 反射setaccessible_advancedday16类加载器,反射

    加载配置文件 在src目录下创建一个config.properties配置文件,使用类加载器加载配置文件. //创建集合Properties properties=new Properties();/ ...

  4. java 类加载器 解密_JAVA类加载器总结整理

    一.What(是什么?) 1.概念 Java类加载器是Java运行时环境的一部分,负责动态加载Java类到JVM的内存空间中.每个Java类必须由某个类加载器装入到内存中.每一个类加载器都有一个父类加 ...

  5. 高新技术(反射、内省、类加载器、代理)

    一.反射 1.概述: 1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方 ...

  6. delphi7 获取dll的类_跟我学Java内存管理----JMM精华终章(类加载器)

    1 类加载器 1.1 类的加载过程 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...

  7. day19_java基础加强_动态代理+注解+类加载器

    一.动态代理 1.1.代理模式     什么是代理模式及其作用?         Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一.         代理模式的定义: ...

  8. 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强

    l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...

  9. Java基础之02 动态代理模式172 173 类加载器原理分析

    动态代理 所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect ...

最新文章

  1. 云告警平台 OneAlert :如何帮助运维工程师做好汇报?
  2. python包介绍:numpy
  3. apue对java_[apue] 一个快速确定新系统上各类限制值的工具
  4. 微软更懂“怎样尊重程序员”,正在改进程序员招聘流程
  5. Python集合和函数
  6. java中的关键字有哪些_java关键字复习
  7. python在工厂中的应用_python中的工厂方法
  8. 为什么技术团队领导者多是后台开发人员
  9. python如何给一组数据打标签_给数据集打标签python代码实现(1)
  10. python urllib3 request 无返回结果_python urllib request urlopen请求网页返回bytes类型
  11. Sql Server 中利用游标对table 的数据进行分组统计式输出…
  12. Linux下如何查看高CPU占用率线程 专题
  13. python 导入excel_经理要我把五百万条数据全部导入Excel!还好有Python!不然等死...
  14. html gbk正确 utf-8乱码,GBK与UTF-8互转乱码详解
  15. OEM、ODM、OBM分别是什么?
  16. 光纤接头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. mkv linux 封装字幕,【多媒体封装格式详解】---MKV【1】
  18. Matlab求正态函数积分,积分对应的分位点
  19. [Camera Drv]开video dynamic framerate,特定场景下video encode时会闪屏 - MTK物联网在线解答 - 技术论坛
  20. 【Kotlin 协程】Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

热门文章

  1. php识别名片,用户信息名片怎么利用PHP实现自动生成
  2. Web服务 源码编译安装LAMP架构
  3. insert into select 主键自增_springboot2结合mybatis拦截器实现主键自动生成
  4. GPT转MBR怎么转?GPT转MBR完整图文教程
  5. windows文件中的中文在ubuntu下乱码(小弟参考了许多都不行,这个绝对行啊) .
  6. 关于堆空间溢出的错误解决办法
  7. Linux如何指向mysql_linux的基本操作(mysql 的基本操作)
  8. python 图片地址_python解码data:image开头的图片地址
  9. zabbix setup.php出错,apache配置zabbix下setup.php无法显示
  10. jwt token注销_辩证的眼光搞懂 JWT 这个知识点