jvm
2016-10-31 12:26:10 0 举报
AI智能生成
Java虚拟机(JVM)是Java技术的核心组成部分,它是一个虚拟的计算机,负责执行Java字节码。JVM的设计目标是提供一个运行环境,使得Java程序可以在任何硬件和操作系统上运行,实现“一次编写,到处运行”的理念。JVM将Java源代码编译成字节码,然后在JVM上解释执行或通过即时编译器编译成本地机器代码。JVM还负责内存管理、垃圾回收和异常处理等任务,确保Java程序的稳定性和高效性。
作者其他创作
大纲/内容
GC算法
老牌:引用计数法
缺点
引用和去引用伴随着加法和减法,影响性能
很难处理循环引用
老年代使用算法
标记清除法
从根节点出发,标记可以到达的对象,即是存活对象。清除不可到达的对象
标记压缩法
新生代算法
复制算法
非垃圾对象
可触及性
从根对象可以到达
根
栈中引用的对象
方法区的静态成员或常量引用的对象
JNI方法栈中的本地对象
垃圾回收器
串行回收器
-XX:+UseSerialGC
古老稳定,效率高,停顿时间长
并行收集器
<span style="font-size: 13.3333px;">ParNew收集器</span><br>
<span style="font-size: 13.3333px;">-XX:+UseParNewGC</span>
多线程,需要多核支持,<span style="font-size: 13.3333px;">-XX:ParallelGCThreads限制线程数量</span>
Parallel收集器
建议
新生代占堆的3/8
幸存代占新生代的1/10
发送OOM时,建议使用dump出堆,有利于排查
<table cellpadding="2" cellspacing="0" border="1" bordercolor="#000000" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; border-collapse: collapse; border-spacing: 1px; font-size: 14px; display: block; overflow-x: auto; max-width: 100%; border: 0px; font-family: 'Pingfang SC', STHeiti, 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28px; width: 800px; background-color: rgb(248, 248, 248);"><tbody style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-Xms</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM初始分配的堆内存大小,默认是物理内存的1/64。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-Xmx</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM最大分配的堆内存大小,默认是物理内存的1/4。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-XX:PermSize</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM初始分配的非堆内存大小,默认是物理内存的1/64。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-XX:MaxPermSize</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM最大分配的非堆内存大小,默认是物理内存的1/4。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-XX:NewSize</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM初始分配的新生代堆区域内存大小。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-XX:MaxNewSize</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">JVM最大分配的新生代堆区域内存大小。</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td></tr><tr style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-XX:ReservedCodeCacheSize</span><br style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"></td><td style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; padding: 4px 8px; border: 1px solid rgb(204, 204, 204);"><span style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">编译代码时的缓存空间大小。</span></td></tr></tbody></table>
多跑线程,减少栈的大小
每一个线程对应一个栈
栈空间大小,决定了递归调用的深度
GC工作时,其他线程停止工作,导致全局停顿
0 条评论
下一页