文档章节

fastjson导致java.lang.OutOfMemoryError: PermGen spac

l
 lizhi.zero
发布于 2016/07/13 17:53
字数 466
阅读 79
收藏 0
点赞 0
评论 0

fastjson 1.2.5 

从携程获取机票订单详情的时候,返回的json对象较为复杂且内容巨多,同事通过fastjson解析成java对象。用户每次请求都会执行如下代码片段:

ParserConfig,XmlDateTypeDeserializer,DateTypeDeserializerS这三个类是工具类为什么要每次请求的时候都要new呢,明显可以作为工具使用,先不纠结这个。咱先重现内存溢出,永久代的内存溢出,模拟http请求,同时发起1000个,果然内存溢出了。

1.通过jsp -l 发现jetty 容器的pid=2557

 

2. jstat -gc 2557 250 20

 

发现jvm一直在进行ygc和fgc,而且永久代已经用完了,难道上述代码真能引起PermGen spac吗?我们知道永久带主要是存储的是java的类信息,包括解析得到的方法、属性、字段,深入java虚拟机中介绍常量池也是属于永久代,永久代=方法区+运行时常量池。

3.jmap -histo -F 2557  加上"-F"就会强制执行 显示对中的对象统计信息

 

发现json在使用asm生产了很多代理类

初步猜想是fastjson在通过动态代理的时候生成了代理类,每次请求都会生成新的代理,导致永久代一直加载新的类信息,结果PermGen spac出现了。

4.查看代码验证猜想,把 ParserConfig,XmlDateTypeDeserializer,DateTypeDeserializer放到静态块内初始化,这样三个类只有一个实例,通过修改代码并测试,发现少了ASM生成的动态代理类,异常也不见了。

5.这到底是为什么呢?为什么在new ParserConfig,XmlDateTypeDeserializer,DateTypeDeserializer这个三个类的时候会生成很多代理呢?并且还有其他动态代理类出现了,继续研究fastjson源码。

© 著作权归作者所有

共有 人打赏支持
l
粉丝 1
博文 14
码字总数 4859
作品 0
heap space 和 permgen space 溢出的简单解决方法和原理笔记

1 . PermGenspace 全称是Permanent Generationspace,是指内存的永久保存区域. 用于存放,Class和Meta的信息,Class在被 Load的时候被放入PermGenspace区域.所以当我们的应用服务器在启动的时候...

orpheus ⋅ 2009/11/18 ⋅ 0

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

本来想写一写项目中遇到的内存溢出的问题,看了好多博客,发现有一篇特别好的博客,拾人牙慧,共享分享。 转载:http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryErro...

mengdonghui123456 ⋅ 2017/02/07 ⋅ 0

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小、程序不严密,产生了过多的垃圾。 导致OutOfMemoryError异常的常见原因...

lcdmusic ⋅ 2015/01/20 ⋅ 0

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

一,java开发中: java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小、程序不严密,产生了过多的垃圾。 导致OutOfMemory...

今日竹石 ⋅ 2014/04/17 ⋅ 0

【java异常】java.lang.OutOfMemoryError: PermGen space

问题描述 java程序运行时报PermGenspace错误 错误信息 Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen space Exception in thread "ContainerBackgroundProce......

季_苗 ⋅ 2016/09/13 ⋅ 2

Java内存溢出(OOM)异常完全指南

我的职业生涯中见过数以千计的内存溢出异常均与下文中的8种情况相关。本文分析什么情况会导致这些异常出现,提供示例代码的同时为您提供解决指南。 -- Nikita Salnikov-Tarnovski (Plumbr ...

CHEN川 ⋅ 2017/07/19 ⋅ 0

java.lang.OutOfMemoryError处理错误

java.lang.OutOfMemoryError异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能...

今日竹石 ⋅ 2014/03/18 ⋅ 0

内存泄露java.lang.OutOfMemoryError: PermGen space解决方法

内存泄露java.lang.OutOfMemoryError: PermGen space解决办法 今天访问web服务器,点击几个网页,tomcat服务就瘫痪了,通过查看日志,发现java.lang.OutOfMemoryError: PermGen space错误,如...

lcdmusic ⋅ 2015/01/20 ⋅ 0

Android OutOfMemoryError异常解决方法

java.lang.OutOfMemoryError异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能...

SRain215 ⋅ 2016/03/15 ⋅ 0

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMeth......

lar555 ⋅ 2016/08/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 28分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 35分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 53分钟前 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

centos7下创建新用户并授权

1、创建新用户 创建一个用户名为:test adduser test 创建初始密码: passwd test 2、授予root权限 个人用户的权限只可以在/home/test下有完整权限,其他目录要看别人授权。而经常需要roo...

xixingzhe ⋅ 今天 ⋅ 0

求助:TiledMap如何旋转对象呢?

比如我要旋转一个梯子的角度,单纯在TiledMap旋转角度好像没有效果。那是要用代码来控制角度,还是说只能通过导入相对应的斜的图片才可以呢?

花谢自相惜 ⋅ 今天 ⋅ 0

Micronaut 之HelloWorld!

小试一下Micronaut,按照官方文档跑了一下helloworld 第一步克隆,按照官方文档是: git clone git@github.com:micronaut-projects/micronaut-core.git 结果怎么是这样?? 换个方法吧 git ...

桂哥 ⋅ 今天 ⋅ 0

pom文件

Aeroever ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部