JVM一次实践
来源:互联网 发布:vscode拆分成两栏 编辑:程序博客网 时间:2024/06/09 15:36
•1、栈区(stack segment)
• 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放内存资源
•2、堆区(heap segment)
• 一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收
•3、静态区(data segment)
• 存放全局变量,静态变量和字符串常量,不释放
•4、代码区(code segment)
• 存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域
• java堆由Perm区和Heap区组成,Heap区则由Old区和New区组成,而New区又分为Eden区, From区, To区,Heap = {Old + NEW = { Eden, From, To } }
当URL被访问时,内存申请过程如下:
A. JVM会试图为相关Java对象在Eden中初始化一块内存区域
B. 当Eden空间足够时,内存申请结束。否则到下一步
C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区
D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"out of memory错误"
java.lang.OutOfMemoryError:PermGenspace
JVM管理两种类型的内 存,堆和非堆。堆是给开发人员用的,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
JMAP Java Memory Map
•jmap –heap pid
•Jmap –histo pid >c:/jmap.txt
===============================================
1、Java中可以在堆(heap)中申请内存,但是没有手动的释放内存机制,采用的是GC(Java垃圾回收机制),
但是实现或继承Collection的类,在new对象之后,到所使用它的函数运行结束,才会进行内存回收。
2、调查方法及工具
工具的位置C:\Program Files\Java\jdk1.6.0_31\bin下
(1)jps(查看JVM中进程信息——包含进程号--------Bootstrap名称的是启动的tomcat)
(2)jconsole(可以关联一个指定的进程,进行垃圾回收,查看内存占用情况,选择对应的Bootstrap进程)
(3)jmap -heap pid(指定进程的,查看内存配置及使用情况)
jmap -histo pid(tomcat进程的pid,查看该服务中实例化类的个数)
jmap -histo pid > C:\mem.txt 输出结果定向到C盘的mem.txt中
但是实现或继承Collection的类,在new对象之后,到所使用它的函数运行结束,才会进行内存回收。
2、调查方法及工具
工具的位置C:\Program Files\Java\jdk1.6.0_31\bin下
(1)jps(查看JVM中进程信息——包含进程号--------Bootstrap名称的是启动的tomcat)
(2)jconsole(可以关联一个指定的进程,进行垃圾回收,查看内存占用情况,选择对应的Bootstrap进程)
(3)jmap -heap pid(指定进程的,查看内存配置及使用情况)
jmap -histo pid(tomcat进程的pid,查看该服务中实例化类的个数)
jmap -histo pid > C:\mem.txt 输出结果定向到C盘的mem.txt中
阅读全文
0 0
- JVM一次实践
- jvm 实践
- 记一次jvm crash
- 一次JVM调优
- 记一次JVM调优
- 一次2000修复实践
- 一次编程实践
- windump 的一次实践
- 一次优化实践
- 记一次谈判实践
- 一次MVVM+ReactiveCocoa实践
- 多线程的一次实践
- 一次RTMP的实践
- 记一次JVM调优Tuning
- 一次jvm调优实战
- 一次jvm调优实战
- 一次jvm调优实战
- 记一次JVM内存调整
- Andoird控件收集
- ExtJS前端框架EXT弹出窗口事件
- linux下的线程
- 创建执行线程的方式三:实现 Callable 接口
- UESTC 图论专题 A-D
- JVM一次实践
- 服务器无法连接网络,排查方法?
- c++文件操作
- MATLAB中Bessel函数的表示计算
- 开发你的第一个React + Ant Design网页(一、配置+编写主页)
- Mac环境下使用XMAPP 安装testlink
- 使用JAVA通过AES将对象加密为字符串
- Matlab调用系统命令,实现自动关机等等......
- SAP_常用业务数据表