java发展历程
java平台
java虚拟机列表
HotSpot是Oracle(Sun)的JVM实现,默认解析执行(InterPreter),对执行频率高(热点)的代码做动态编译(JIT编译)。主要用C++实现,2006年开源。
HotSpot三种执行模式
HotSpot包括
内存管理
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、应用泄漏:向集合类中无限制加入大量对象
垃圾回收