使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存
一、问题背景
自己开发的Java项目中占用太多的Heap Space。即使在Eclipse的虚拟机参数中设置“-Xms128m -Xms2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m”之后,仍超出Heap空间。决定用Jprofiler分析问题原因。
二、解决过程
Jprofier分析过程中,发现下面的char[]和java.lang.String对象占用大量heap堆内存
以char[]为例,分析调用char[]的instance(或者objects),选中以后,分析其incoming references,如下图所示,
确定原因以后,分析主要是GraphBuilder类的对象占用了太多的空间。
因此,在该类中添加如下函数。
函数中对类的所有成员对象赋值为空,然后再强制执行垃圾回收。
进一步:
在使用该类的地方,主动调用这个类的销毁函数,然后再一次对类整体执行回收。
三、解决效果
启动Eclipse,进入调试,同时Jprofiler attach到调试进程。(在Eclipse中的Jprofiler图标上点一下,就能跟踪到调试进程。)
执行builder.finalizeItSelf()以后。
问题解决。说明内存得到了释放。
使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存的更多相关文章
- 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
转载:http://blog.csdn.net/wanghuiqi2008/article/details/50724676 一.开发环境: 操作系统:ubuntu 14.04 IDE:Eclipse ...
- java web项目导入到eclipse中变成了java项目的一种情况的解决办法
前提,我把代码上传到github上之后,在另外一台电脑上拉下之后,先报出现的是jre不对,然后换成了当前的jre,然后红色的感叹号消失了但是之前项目上那个小地球不见了,也就是说变成了java项目. - ...
- Java项目中的异常处理情况
1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象 ...
- 在 NetBeans IDE 6.0 中分析 Java 应用程序性能
NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU ...
- Android高效内存:让图片占用尽可能少的内存
Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336 小图:220 * 168 小图的高宽都是大图的1/2--> ...
- Linux查看CPU和内存使用情况(转)
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- Linux查看CPU和内存使用情况
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- Linux查看CPU和内存使用情况【转】
转自:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应 ...
- 【转】Linux查看CPU和内存使用情况
=====================================top============================================== 在系统维护的过程中,随时可 ...
随机推荐
- [Java] 数据类型, 变量, 运算符, 表达式
title: [Java] 变量与表达式 你已经学会输出 Hello world 了, 那么现在, 我们来学习关于变量的知识 基本数据类型 在 Java 中, 有 8 种基本的数据类型: 名称 描述 ...
- lumen Rest API 起步
lumen Rest API 起步 修改项目文件 .env DB_DATABASE=<数据库名> DB_USERNAME=<数据库用户名> DB_PASSWORD=<数据 ...
- hdu3665 水最短路
题意 : 从起点0开始,到达最近的那个是海边的城镇的距离.. 思路: 水的最短路,随你怎么写,dij,floyd,spfa..都行,只要你喜欢..我写的spfa好久不写了,复 ...
- Mac/Win录屏工具推荐-LICEcap
轻小.便捷.操作简单 下载 LICEcap v1.30 for macOS LICEcap v1.28 for Windows 参考地址
- Nebula Graph 的 Ansible 实践
本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow & 看大厂图数据库技术实践 背景 在 Nebula-Graph 的日常测试中,我们会经常在 ...
- 手写Spring MVC框架(一) 实现简易版mvc框架
前言 前面几篇文章中,我们讲解了Spring MVC执⾏的⼤致原理及关键组件的源码解析,今天,我们来模仿它⼿写⾃⼰的mvc框架. 先梳理一下需要实现的功能点: tomcat加载配置文件web.xml: ...
- 01 CTF MISC 杂项 知识梳理
1.隐写术( steganograhy ) 将信息隐藏到信息载体,不让计划的接收者之外的人获取信息.近几年来,隐写术领域已经成为了信息安全的焦点.因为每个Web站点都依赖多媒体,如音频.视频和图像.隐 ...
- golang:指针理解总结
指针的定义 指针是一个代表着某个内存地址的值.这个内存地址往往是在内存中存储的另一个变量的值的起始位置. go指针是提供操作数据的基本桥梁.因为go很多调用,往往复制一份对象,例如函数的参数,如果没有 ...
- [bug] maven“1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”
原因 maven打包默认采用jdk 1.5,无法识别<> 解决 在pom.xml中加入: <properties> <maven.compiler.source>1 ...
- 【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解
Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解 1清风揽月10人评论5006人阅读2017-06-21 15:48:43 博文说明[前言]: 本文 ...