JVM 方法区内存扩大 以及开启GC
因为应用使用了OSGi框架,《深入理解JAVA虚拟机》中对使用OSGi时可能产生的方法区溢出有所描述
第一部分:
第二部分
可见,OSGi会动态生成大量Class,在OSGi中,即使是同一个类文件,被不同的加载器加载也会视为不同的类。
因此方法区在默认比较小的情况下,可能会溢出,实际上也确实遇到了
我计划的解决方法
1.确认Linux物理内存大小,free -h
2.确认JDK版本,已确认是64位的 JDK1.6
hotspot1.6中,整个JVM堆内存大小=Xmx=年轻代大小 + 老年代大小。持久代(也就是方法区)要另外算,默认大小是64M(64位JVM由于指针膨胀,默认是85M)
永久代是一片连续的堆空间,在JVM启动之前通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间,当JVM加载的类信息容量超过了参数-XX:MaxPermSize设定的值时,应用将会报OOM的错误
3.修改启动脚本
java -Xmx256m -XX:PermSize=128M -XX:MaxPermSize=256MB TestData.java
4.
// 查看当前机器上所有运行的java进程名称与pid(进程编号)
jps -l
// 显示指定的jvm进程所有的属性设置和配置参数
jinfo pid
// 查询某个pid进程对应的应用程序内存占用情况
jmap -heap pid
// 显示进程详情
jstack pid
// jstat: 可以实时监测系统资源占用与jvm运行情况 (位于”jdk_home/bin”目录下)
jstat -class -t
JVM 方法区内存扩大 以及开启GC的更多相关文章
- jvm 虚拟机参数_方法区内存分配
1.方法区( 永久区 ) 和堆一样,方法区是一块所有线程共享的区域,他用于保存系统类的信息.默认情况下 -XX:MaxPermSize 为 64m.如果系统运行时产生大量的类,就需要设置一个合适方法区 ...
- java虚拟机 jvm 方法区实战
和java堆一样,方法区是一块所有线程共享的内存区域,用于保存系统的类信息,类的信息有哪些呢.字段.方法.常量池.方法区也有一块内存区域所以方法区的内存大小,决定了系统可以包含多少个类,如果系统类太多 ...
- Jvm方法区以及static的内存分配图
前面的几篇都没有太明确地指出 方法区 是什么?现在通过一些资料的收集和学习,下面做一些总结 什么是方法区: 方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息 ...
- jvm 方法区
方法区在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中.类型信息是由类加载器在类加载时从类文件中提取出来的.类(静态)变量也存储在方法区中. jvm实现的设计者决定了类型信息的内部 ...
- JVM回收方法区内存
很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是 ...
- 03-JVM内存模型:堆与方法区
一.堆(Heap) 1.1.什么是堆 堆是用于存放对象的内存区域.因此,它是垃圾收集器(GC)管理的主要目标.其具有以下特点: 堆在逻辑上划分为“新生代”和“老年代”.由于JAVA中的对象大部分是朝生 ...
- 三、JVM之方法区
一.什么式方法区 方法区,也称非堆(Non-Heap),又是一个被线程共享的内存区域.其中主要存储加载的类字节码.class/method/field等元数据对象.static-final常量.sta ...
- JVM 专题十一:运行时数据区(六)方法区
1. 栈.堆.方法区关系交互 运行时数据区结构图: 从线程共享与否的角度来看: 2. 方法区的理解 2.1 方法区在哪里? <Java虚拟机规范>中明确说明:“尽管所有的方法区在逻辑上属于 ...
- JVM之---Java内存分配参数(第四篇)
1.内存分配参数---大纲 Ø如何设置堆内存 Ø如何设置栈内存 Ø如何设置方法区 Ø如何设置对的分配比率 Ø设置参数打印堆栈: ØJava程序的两种模式:Server&Client 2.设置堆 ...
随机推荐
- Shell-cat url-list.txt | xargs wget -c
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接: cat url-list.txt | xargs wget -c
- input[type=file]上传文件(格式判断、文件大小、上传成功后操作)
var isUploadImg = false; //在input file内容改变的时候触发事件******************上传图片 $('#filed').change(function( ...
- VC++、MFC最好的开源项目
介绍:介绍一下用VC++/MFC写的最好的开源项目. Sourceforge.net中有许多高质量的VC++开源项目,我列举了一些可以作为VC++程序员的参考. 正文: VC++.MFC中最好的开源项 ...
- PHP JSON 数据解析代码
作者: 字体:[增加减小] 类型:转载 PHP解析JSON 数据代码,与大多数流行的 Web 服务如 twitter .人人网通过开放 API 来提供数据一样,它总是能够知道如何解析 API 数据 ...
- 无线桥接(WDS)如何设置?
一.WDS使用介绍 无线桥接(WDS)可以将多台无线路由器通过无线方式互联,从而将无线信号扩展放大.无线终端在移动过程中可以自动切换较好的信号,实现无线漫游. 本文指导将TL-WR740N当作副路由器 ...
- Mudo C++网络库第四章学习笔记
C++多线程系统编程精要 学习多线程编程面临的最大思维方式的转变有两点: 当前线程可能被切换出去, 或者说被抢占(preempt)了; 多线程程序中事件的发生顺序不再有全局统一的先后关系; 当线程被切 ...
- JS导出excel设置下载的标题/与angular结合冲突
2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...
- 036_lua应用扩展
一.request_id定义 ## # request id ## lua_package_path '/opt/nginx/conf/lua/lib/?.lua'; init_by_lua ' uu ...
- mysql select in 怎么优化
2017年7月10日 22:36:54 星期一 原理: 把select where in 变换成 "where = " 或者 "where between and &qu ...
- springboot:扩展类型转换器
需求:提交一个字符串到后端的java.sql.Time类型,就报错了: Failed to convert property value of type [java.lang.String] to r ...