加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

JVM难学?那是因为你没认真看完这篇文章

发布时间:2018-08-20 07:08:28 所属栏目:空间 来源:佚名
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。 虚拟机管理内存数据区

单线程下无论栈帧太大还是栈容量太小,及引用深度超过虚拟机允许深度都会抛出StackOverflowError每个方法压入栈的帧大小是不一致的。多线程下当每个线程分配栈帧太大内存不能够扩展时抛出OutOfMemoryError异常线程栈帧越大,可创建的线程越少。

3.方法区参数

-XX:PermSize方法区内存最小值

-XX:MaxPermSize 方法区内存最大值

各个线程共享的内存区域,主要用来存储类的元数据、常量、静态变量、即时编译器编译后的代码等数据

例:-XX:PermSize=20M -XX:MaxPermSize=20M

异常类型 OutOfMemoryError :

原因:常量过多,或代理反射等使用频繁

4.本机直接内存参数

-XX:MaxDirectMemorySize

例:-XX:MaxDirectMemorySize=10M

不足时抛出OutOfMemory异常

四:垃圾收集算法

经典的垃圾回收算法以下几种

 一、标记--清除算法(Mark-Sweep)

回收前状态:

JVM难学?那是因为你没认真看完这篇文章

回收后状态:

JVM难学?那是因为你没认真看完这篇文章

优缺点:

算法执行分为两个阶段标记与清除,所有的回收算法,基本都

基于标记回收算法做了深度优化

缺点:效率问题,内存空间碎片(不连续的空间)

二、复制算法(Copying)

回收前状态:

Eden内存空间 8

JVM难学?那是因为你没认真看完这篇文章

Survivor1空间(From空间)1

JVM难学?那是因为你没认真看完这篇文章

Survivor2空间(To空间) 1

JVM难学?那是因为你没认真看完这篇文章

Eden内存空间与Survivor空间 8:1

JVM难学?那是因为你没认真看完这篇文章

回收后状态:

JVM难学?那是因为你没认真看完这篇文章

Survivor1空间(From空间)1

JVM难学?那是因为你没认真看完这篇文章

Eden内存空间与Survivor空间 8:1

JVM难学?那是因为你没认真看完这篇文章

优缺点:

比较标记清除算法,避免了回收造成的内存碎片问题,

缺点:以局部的内存空间牺牲为代价,不过空间的浪费比较小,默认8:1的比例1是浪费的。

复制也有一定的效率与空间成本

三、标记整理算法(Mark-Compact)

回收前状态:

JVM难学?那是因为你没认真看完这篇文章

回收后状态:

JVM难学?那是因为你没认真看完这篇文章

优缺点:

避免了,空间的浪费,与内存碎片问题。

缺点:整理时复制有效率成本。

五:垃圾收集器

一、七种垃圾收集器

(1) Serial(串行GC)-XX:+UseSerialGC

(2) ParNew(并行GC)-XX:+UseParNewGC

(3) Parallel Scavenge(并行回收GC)

(4) Serial Old(MSC)(串行GC)-XX:+UseSerialGC

(5) CMS(并发GC)-XX:+UseConcMarkSweepGC

(6) Parallel Old(并行GC)-XX:+UseParallelOldGC

(7) G1(JDK1.7update14才可以正式商用)

JVM难学?那是因为你没认真看完这篇文章

二.1~3用于年轻代垃圾回收:年轻代的垃圾回收称为minor GC

三.4~6用于年老代垃圾回收(当然也可以用于方法区的回收):年老代的垃圾回收称为full GC

G1独立完成"分代垃圾回收"

注意:并行与并发

并行:多条垃圾回收线程同时操作

并发:垃圾回收线程与用户线程一起操作

四、常用五种组合

Serial/Serial Old

ParNew/Serial Old:与上边相比,只是比年轻代多了多线程垃圾回收而已

ParNew/CMS:当下比较高效的组合

Parallel Scavenge/Parallel Old:自动管理的组合

G1:最先进的收集器,但是需要JDK1.7update14以上

五. Serial/Serial Old

年轻代Serial收集器采用单个GC线程实现"复制"算法(包括扫描、复制)

年老代Serial Old收集器采用单个GC线程实现"标记-整理"算法

Serial与Serial Old都会暂停所有用户线程(即STW)

说明:

STW(stop the world):编译代码时为每一个方法注入safepoint(方法中循环结束的点、方法执行结束的点),在暂停应用时,需要等待所有的用户线程进入safepoint,之后暂停所有线程,然后进行垃圾回收。

适用场合:

CPU核数<2,物理内存<2G的机器(简单来讲,单CPU,新生代空间较小且对STW时间要求不高的情况下使用)

-XX:UseSerialGC:强制使用该GC组合

-XX:PrintGCApplicationStoppedTime:查看STW时间

六.ParNew/Serial Old:

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读