JVM基础

java发展历程

JVM基础_第1张图片

java平台

JVM基础_第2张图片

java虚拟机列表

JVM基础_第3张图片

HotSpot是Oracle(Sun)的JVM实现,默认解析执行(InterPreter),对执行频率高(热点)的代码做动态编译(JIT编译)。主要用C++实现,2006年开源。

HotSpot三种执行模式

JVM基础_第4张图片

HotSpot包括

JVM基础_第5张图片



内存管理

JVM基础_第6张图片

Tenured:
终身代存放SurvivorSpace中经过多次垃圾回收后依然存活的对象。

Perm:
持久代 (也叫 方法区)存放每个类的结构,如静态常量,字段和方法包括构造函数。对于spring,hibernate这些需要动态类型支持的框架,这个区域需要足够的空间

分代回收的过程

1、新创建的对象在伊甸园中诞生(Eden Space)。
2、当Eden Space中对象占用内存达到一定比例,则垃圾回收器开始对Eden Space进行垃圾回收,清除掉生命周期结束的对象,并将仍然在生命周期中的对象移动到幸存区(Survivor Space )。
3、当Eden Space经过多次垃圾回收后,依然存活在幸存区(Survivor Space)中的对象,被移动到老年代中(Old Generation)。
4、当老年代中的空间占用达到一定比例,则执行老年代的垃圾回收(Full GC)。

在年轻代(Young Generation)中发生的GC被称为Young GC,Young GC发生的频率远大于Full GC
老年区中的GC被称为Full GC,由于Full GC涉及到所有的存活对象,所以远较Young GC慢。
在我们这种实时系统中应该减少Full GC的发生。

几种内存溢出

1、gc机制导致的内存溢出:
java内存分配过少或者各代比例分配不恰当导致,可以根据实际情况调整内存参数解决。
2、永久区的内存溢出:
在使用动态生成class的一些框架中可能导致java.lang.OutOfMemoryError: PermGen space 启动参数添加-XX:MaxPermSize=128m可以设定永久区的上限
3、高并发导致的内存溢出:
如在session中保持较大的数据,在高并发的情况下,session将占用很大的内存。
4、应用泄漏:向集合类中无限制加入大量对象




JVM基础_第7张图片

垃圾回收

JVM基础_第8张图片



你可能感兴趣的:(jvm)