加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

JVM难学?那是由于你没当真看完这篇文章

发布时间:2018-08-16 12:24:58 所属栏目:站长百科 来源:佚名
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 一:假造机内存图解 JAVA措施运行与假造机之上,运行时必要内存空间。假造机执行JAVA措施的进程中会把它打点的内存分别为差异的数据地区利便打点。 假造机打点内存数据地区分别如下
副问题[/!--empirenews.page--] 技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战

 一:假造机内存图解

JAVA措施运行与假造机之上,运行时必要内存空间。假造机执行JAVA措施的进程中会把它打点的内存分别为差异的数据地区利便打点。

JVM难学?那是由于你没当真看完这篇文章

假造机打点内存数据地区分别如下图:

JVM难学?那是由于你没当真看完这篇文章

数据地区分类:

要领区            (Method Area)

假造机栈         (VM Stack)

当处所法栈     (Native Method Stack)

堆                   (Heap)

措施计数器    (Program Counter Register)

直接内存        (Direct Memory)

声名:

1. 措施计数器

行号指示器,字节码指令的分支、轮回、跳转、非常处理赏罚、线程规复(CPU切换),每条线程都必要一个独立的计数器,线程私有内存互不影响,该地区不会产生内存溢出非常。

2. 假造机栈

是线程私有的,声明周期与线程沟通,假造机栈是Java要领执行的内存模子,每个要领被执行时城市建设一个栈帧,即要领运行时代的基本数据布局,栈帧用于存储:局部变量表、操纵数栈、动态链接、要领出口等,每个要领执行中都对应假造机栈帧从入栈处处栈的进程。

是一种数据布局,是假造机中的局部变量表,对应物理层之上的措施数据模子。

局部变量表,是一种措施运行数据模子,存放了编译期可知的各类数据范例譬喻:

Boolean、byte、char、short、int、float、long、double、工具引用范例(工具内存地点变量,指针或句柄),措施运行时,按照局部变量表分派栈帧空间巨细,在运行中,巨细是稳固的非常范例:stackOverFlowError 线程哀求栈深度大于假造机应承深度 OutOfMemory 内存空间耗尽无法举办扩展。

3. 当处所法栈

与假造机栈相同,假造机栈为Java措施处事,当处所法栈支持假造机的运行处事,详细实现由假造机厂商抉择,也会抛出 stackOverFlowError、OutOfMemory非常。

4. 堆

是假造机打点内存中最大的一部门,被全部线程共享,用于存下班具实例(工具、数组),物理上不持续的内存空间,因为GC网络器,分代网络,以是分别为:新生代 Eden、From SurVivor空间、To SurVivor空间,allot buffer(分派空间),也许会分别出多个线程私有的缓冲区,晚年月。

5. 要领区

与堆一样属于线程共享的内存地区,用于存储假造机加载的类信息、常量、静态变量、即时编译器编译后的代码(动态加载OSGI)等数据。理论上属于java假造机的一部门,为了区分隔来叫做 Non-Heap非堆。

这个地区可以选择不举办垃圾接纳,该地区接纳目标首要是常量池的接纳,及范例的卸载class,内存区不敷时会抛出OutOfMemory非常

运行时常量池:

要领区的一部门,Class的版本、字段、接口、要领等,及编译期天生的各类字面量、标记引用,编译类加载后存放在该地区。会抛出OutOfMemory非常。

6. 直接内存

直接内存不属于假造内存地区,是一种基于通道与缓冲区的IO方法,可以行使当地函数直接分派堆外内存,在堆中存储引用的外部内存地点,通过引用完成对直接引用内存的操纵,1.4之后提供的NIO明显进步服从,停止了堆内存与Native内存的往返覆制操纵,不受假造机内存节制,会抛出OUtOfMemory非常。

二:工具会见内部实现进程

工具会见 涉及到工具的地点改观状态改观,内存地点移动,变量、接口、实现类、要领、父类械寥。

 一、 句柄方法 (会见)

JVM难学?那是由于你没当真看完这篇文章

二、指针方法 (会见)

JVM难学?那是由于你没当真看完这篇文章

优弱点:

句柄会见方法:reference中存储的是不变的地点,工具改观时只会改变句柄实例数据指针,引用自己不必要修改

指针会见方法:利益速率快,节减了指针定位时刻开销

三:内存地区节制参数及对应溢出非常

开拓进程中,或措施运行进程中每次碰着OutOfMemory非常或GC非常或StackOverflowError非常我们都是一堆参数乱配,都把值调大,只是概略知道是跟jvm内存分派有关,详细应该怎么调,对应的非常应该调解那些参数,可能换句话说,jvm内存分派地区中都别离对应那些参数大大都环境下都是不知道的,只是把相干的参数跳上去,预期功效都是应该起浸染,到底能不能起浸染,本身内心也没底。下面就来说一下jvm堆、栈、要领区等内存地区对应的参数,及每个地区也许抛出的非常范例,产生非常的场景说明。

一、参数范例

1.堆空间参数

2.栈空间参数

3.要领区空间参数

4.本机直接内存参数

二、非常范例

1.OutOfMemory非常

2.StackOverflowError非常

三、帮助参数声名

1.-XX:+HeapDumpOnOutOfMemoryError 打印堆内存非常时打印出快照信息

2.-XX:+HeapDumpPath 快照输出路径

3.-Xmn指定eden区的巨细 -XX:SurvirorRation来调解幸存区的巨细

4.-XX:PretenureSizeThreshold配置进入晚年月的阀值

四、参数声名、对应场景的非常

1.堆内存参数

-Xms:堆最小值(新生代和晚年月之和)

-Xmx:堆最大值(新生代和晚年月之和)

当最小值=最大值时,这时堆内存是不行扩展的。

例:-Xms80M -Xmx80M

凡是将-Xmx和-Xms配置为一样的巨细来镌汰gc的次数,堆内存不敷时抛出OutOfMemoryError非常。

2.栈内存参数

-Xss

例:-Xss128k

(编辑:湖南网)

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

热点阅读