jvm
Posted swaggyC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm相关的知识,希望对你有一定的参考价值。
jvm,作为java平台通用性的实现基础,重要性不言而喻。
1.开发新项目,写运行脚本时要运用相关知识,确定jvm参数
2.维护老项目,需要对jvm进行性能调优
jvm内存划分:
1.程序计数器
2.虚拟机栈,局部变量,操作数等。当方法需要的栈深度超过规定的最大深度,会报stackFlowOver异常
3.堆,对象分配
4.本地方法栈,native方法使用
5.方法区(包括运行常量池),常量,静态变量以及类的相关信息,Class对象(比较特殊)也在这里
6.直接内存,比如nio就会使用直接内存,减少了java堆和native堆之间来回复制数据
各区内存不足时会报出outOfMemory异常
垃圾收集策略
1.如何判断对象已死:
- 引用计数器。缺点:循环引用,可能会现判断失误
- 根引用是否可达。根引用的定义:虚拟机栈中的引用,方法区的常量引用和静态变量引用,native方法的引用
2.强 软 弱 虚引用的相关介绍见另一篇博文
垃圾回收算法
1.标记清除,cms收集器(用于老年代的垃圾回收)使用该算法。缺点在于容易产生碎片。
2.标记整理。缺点:开销大。
3.复制。缺点:因为要单独开辟区域用作复制,因此内存使用率下降。串行,并行收集器都使用该算法
4.分代,将堆内存分为新生代和老年代。不同代采用不同的垃圾回收算法。
垃圾收集器
1.串行收集器,单线程收集
2.并行收集器,多线程收集
3.并发收集器,垃圾回收与应用并行。
未完待续。。。
以上是关于jvm的主要内容,如果未能解决你的问题,请参考以下文章