狼人杀app无限刷金币有两个版本的,一个大内存一个小内存,有什么区别吗?

狼人杀和王者荣耀一共需要多少内存_百度知道
狼人杀和王者荣耀一共需要多少内存
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
天边一朵云水平知道合伙人
来自娱乐休闲类芝麻团
天边一朵云水平
采纳数:20974
获赞数:27681
擅长:暂未定制
参与团队:
手机内存大于500MB运行内存不小于1G这样玩游戏不会太卡王者荣耀是由腾讯游戏游戏是类dota手游游戏中的玩法以竞技对战为主闯关模式在满足条件后可以参加游戏的年度排位赛
17k书韵公子知道合伙人
17k书韵公子
采纳数:46
获赞数:109
擅长:暂未定制
你是安卓还是苹果?
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。王者荣耀更新内存不足怎么办?更新内存不足的解决方法[图] - 高手进阶 - 嗨客手机站
您的位置: →
→ 王者荣耀更新内存不足怎么办?更新内存不足的解决方法
类型:策略棋牌大小:768.56MB评分:9.7平台:标签:
在中更新内存不足怎么办?王者荣耀更新包一般多大?下面就由嗨客小编给大家详细介绍王者荣耀更新内存不足解决方法!希望这篇文章能让大家知者荣耀更新内存不足怎么办!
10月19日的更新包,从之前抢先服的更新内容来看,应该是非常巨量的数据,并且会停机更新,至于更新包多大,按照以往的赛季更替来看,应该是400M左右。
更新包太大内存不够怎么办
登陆账号后会提示安装包更新,点击更新后会跳转到App Store更新。
苹果更新相当于重新下载游戏安装包,所以手机上要预留足够的存储,差不多1G空间,避免空间不足更新失败,还需要重新下载!
可能玩家会出现此时无法下载提示,可能是同时更新的玩家太多,等待一会在再重新下载吧!
以上是关于“王者荣耀更新内存不足解决方法”的内容,更多关于王者荣耀的攻略尽在 。
爆料英雄()
王者谍报员
杨玉环攻略
英雄Top榜(S8赛季)
安卓版本:v1.22.1.13苹果版本:v1.22.1.6 专题类型:动作类 更新时间: 运营状态:运营中 专题标签:LOL类即时战斗男生精选魔幻 《王者荣耀》是一款非常经典的大型MOBA对战手游,游戏的传承了英雄联盟经典的玩法,全新的5v5对战,以及全新的5v5地图,海量英...
9.8嗨客指数 0人0人
猜你喜欢LOL类即时战斗男生精选魔幻
LOL(全称英雄联盟)是由美国RiotGames开发,腾讯游戏运营的英雄对战网游。《英雄联盟》除了即时战略、团队作战外,还拥有特色的英雄、自动匹配的战网平台,包...专区开测68.3专区9.710专区10专区开服开测8.8专区开测10开服109.4专区9.6专区9.9专区9.99.9专区开服开测9.89.3专区9.6开服开测9.89.810专区10专区10专区109.810
相关游戏其他版本
10开服5.0105.0专区开服开测5.010
王者荣耀游戏资讯[共200篇]7-2712-2012-234-212-1912-27王者荣耀攻略心得[共200篇]2-812-11-2010-241-1810-20王者荣耀游戏问答[共200篇]10-148-209-1211-284-1611-29内存参数详解
1、CASLatency
Control(tCL)Settings =
Auto,1,1.5,2,2.5,3,3.5,4,4.5
  这是最重要的内存参数之一,通常玩家说明内存参数时把它放到第一位,例如3-4-4-8@275mhz,表示cl为3。通常2可以达到更好的性能,但3能提供更佳的稳定性。值得注意的是,WinbondBH-5/6芯片可能无法设为3。
  CAS表示列地址寻址(Column Address Strobe or Column Address
Select),CAS控制从接受一个指令到执行指令之间的时间。因为CAS主要控制十六进制的地址,或者说是内存矩阵中的列地址,所以它是最为重要的参数,在稳定的前提下应该尽可能设低。内存是根据行和列寻址的,当请求触发后,最初是tRAS(Activeto
Delay),预充电后,内存才真正开始初始化RAS。一旦tRAS激活后,RAS(Row
Address Strobe
)开始进行需要数据的寻址。首先是行地址,然后初始化tRCD,周期结束,接着通过CAS访问所需数据的精确十六进制地址。期间从CAS开始到CAS结束就是CAS延迟。所以CAS是找到数据的最后一个步骤,也是内存参数中最重要的。
  这个参数控制内存接收到一条数据读取指令后要等待多少个时钟周期才实际执行该指令。同时该参数也决定了在一次内存突发传送过程中完成第一部分传送所需要的时钟周期数。这个参数越小,则内存的速度越快。必须注意部分内存不能运行在较低的延迟,可能会丢失数据,因此在提醒大家把CAS延迟设为2或2。5的同时,如果不稳定就只有进一步提高它了。而且提高延迟能使内存运行在更高的频率,所以需要对内存超频时,应该试着提高CAS延迟。
影响:主要影响稳定性,轻微影响带宽
建议设置:1.5,2,2.5,和3
2、RAS#to CAS#
Delay(tRCD)
Settings = Auto, 0, 1, 2,
3, 4, 5, 6, 7。
  这个是说明内存参数时排到第二位的数值,例如3-4-4-8@275mhz,表示tRCD为4。
  该参数可以控制内存行地址选通脉冲(RAS,Row Address
Strobe)信号与列地址选通脉冲信号之间的延迟。对内存进行读、写或刷新操作时,需要在这两种脉冲信号之间插入延迟时钟周期。在JEDEC规范中,它是排在第二的参数,出于最佳性能考虑可将该参数设为2,如果系统无法稳定运行则可将该参数设为3。同样的,调高此参数可以允许内存运行在更高的频率上,用户超频内存遇到困难时可以尝试提高tRCD。
影响:主要影响带宽和稳定性
建议设置:
2-5。2能达到最高性能,为达到内存最高频率可设为4或5。
3、MinRAS# Active
Timing(tRAS)
Settings = Auto, 00, 01,
02, 03, 04, 05, 06, 07, 08, 09, 10,11, 12, 13, 14,
  这个是说明内存参数时排到第四位的数值,例如3-4-4-8@275mhz,表示tRAS为8。
  这个选项控制内存最小的行地址激活时钟周期数(tRAS),它表示一个行地址从激活到复位的时间。tRAS过长,会严重影响性能。减少tRAS可以使得被激活的行地址更快的复位,然而,tRAS太短也会造成不够时间完成一次突发传送,数据会丢失或者覆盖。最佳设置是越低越好。通常,tRAS应该设为tCL+tRCD+2个时钟周期。例如如果tCL和tRCD分别为2和3个时钟周期,则最佳的tRAS值为7。但如果产生内存错误或系统不稳定,就必须提高tRAS值了。
  事实上tRAS是极具争议的一个数值。很多人认为00,05或者10是最快最稳定的。但这也未必对每个用户都适用,它根据内存有所不同。通常设为10后内存能达到最好的超频能力。
影响:轻微影响带宽和稳定性
建议设置:00,5-10。
4、RowPrecharge
Timing(tRP)
Settings = Auto, 0, 1, 2,
3, 4, 5, 6, 7  
这个是说明内存参数时排到第三位的数值,例如3-4-4-8@275mhz,表示tRP为4。
  tRP用来设定在另一行能被激活之前,RAS需要的充电时间。tRP参数设置太长会导致所有的行激活延迟过长,设为2可以减少预充电时间,从而更快地激活下一行。然而,想要把tRP设为2对大多数内存都是个很高的要求,可能会造成行激活之前的数据丢失,内存控制器不能顺利地完成读写操作。因此,在稳定的前提下建议tRP设为2,万一不够稳定就必须增加到3或4。
影响:主要影响带宽和稳定性
简直设置:2-4。2为最佳性能,4-5能达到内存的极限频率。
5、RowCycle Time(tRC)
Settings = Auto,
7-22,步进为1。
  这个参数用来控制内存的行周期时间。tRC决定了完成一个完整的循环所需的最小周期数,也就是从行激活到行充电的时间。根据方程,tRC=tRAS+tRP。因此,在设定tRC之前,必须参考一下tRAS和rRP的数值。如果行周期时间过长,会延迟完成一个周期后激活新的行地址的时间。然而,太短会导致被激活的行还未充分充电就开始下一个初始化,这样会造成数据丢失或覆盖。一般情况下根据tRC=
tRAS + tRP
把tRC设为一个较低的值,例如tRAS为7个时钟周期,tRP为4个时钟周期,则理想的tRC值为11。
影响:主要影响稳定性和内存带宽
建议设置:7为最佳性能,15-17为超频建议参数,可以从16开始逐步调低直到稳定。记住公式tRC
= tRAS +tRP 。
6、RowRefresh Cycle
Time(tRFC)
Settings = Auto, 9-24
,步进为1。
  这个设定代表在同一bank中刷新一个单独的行所需的时间。同时还是同一bank中两次刷新指令的间隔时间。tRFC应该比tRC高。
影响:主要影响内存带宽和稳定性。
建议设置:通常不能达到9,而10为最佳设置。17-19是内存超频建议值。可以从17开始逐步往下调节。大多数稳定值为tRC加上2-4个时钟周期。
7、Rowto Row Delay(也称为RAS to RAS
delay)(tRRD)
Settings = Auto,
0-4,步进1  
此参数表示连续的激活指令到内存行地址的最小间隔时间,也就是预充电时间。延迟越低,表示下一个bank能更快地被激活,进行读写操作。然而,由于需要一定量的数据,太短的延迟会引起连续数据膨胀。对于桌面电脑,建议使用2个时钟周期的延迟,此时的数据膨胀可以忽视。tRRD设为2可以提高DDR内存的读写性能,当2才稳定时才应该设为3。
影响:轻微影响内存带宽和稳定性
建议设置:00是最佳性能参数,4超频内存时能达到最高的频率。通常2是最合适的值,00看上去很奇怪,但有人也能稳定运行在00-260MHz。
8、WriteRecovery
Time(tWR)
Settings = Auto, 2,
  tWR表示,在一个内存bank被充电之前,一个有效的写操作完成后延迟的时间。这个延迟保证了在充电之前写缓冲里的数据就能被写入内存单元。延迟越短,说明花更少的时间就能对下一次读写操作充电,但同时也有覆盖数据的可能。我的建议是,使用DDR266和DDR200时可以设为2,但DDR333和DDR400可能不一定稳定,这样就必须设为3。总之在稳定的前提下尽量降低延迟。
影响:轻微影响内存带宽和稳定性
建议设置:2为最佳性能,超频用户可以考虑3。
9、Writeto Read
Delay(tWTR)
Settings = Auto, 1,
  这个参数控制写数据到读指令的延迟,它表示在同一bank中,最近的一次有效写操作到下一次读指令间隔的时钟周期。1个时钟周期自然可以提供从读到写更快速的切换。设为2会影响读数据的速度,但提高稳定性,尤其是高频时。换句话说,对内存超频的玩家,我们建议设为2。通常DDR266和DDR333都能稳定运行在1,这样内存的读速度会更快。当然DDR400的用户也能尝试着设为1,但如果不稳定就必须降到2了。
  tWTR表示读到写的延迟。三星把这个参数称之为TCDLR(last data in
to read command),JDED规格中把它定为一个时钟周期。
影响:轻微影响内存带宽和稳定性
建议设置:1是最佳性能,超频内存时建议设为2。
10、Readto Write
Delay(tRWT)
Settings = Auto, 1-8
  tRWT不是一个标准的内存时序参数,当内存控制器接收到一个读指令后立即又收到一个写指令,在写指令执行之前,会产生一个额外的延迟。较低的延迟可以提高内存子系统的写速度。如果想快速的完成读到写的转换,建议设为1个时钟周期。但显然并非所有的内存都能达到这个要求,不稳定时也会出现数据覆盖的错误。
影响:轻微影响内存带宽和稳定性
建议设置:1是最好性能,超频用户建议为4。普通用户在稳定的基础上选用1。
11、RefreshPeriod(tREF)Settings = Auto,
,步进非固定值。us为微秒
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)(BH-5/6的建议值,频率可达到250+MHz)
--------------------
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
--------------------
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
--------------------
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
mhz(?.?us)
--------------------
mhz(15.6us)
mhz(15.6us)
mhz(15.6us)
mhz(15.6us)
---------------------
mhz(7.8us)
mhz(7.8us)
mhz(7.8us)
mhz(7.8us)
---------------------
mhz(3.9us)
mhz(39us)
mhz(3.9us)
mhz(3.9us)
---------------------
mhz(1.95us)
mhz(1.95us)
mhz(1.95us)
mhz(1.95us)
  这个参数是用来设定刷新的间隔时间,除了Auto选项,还有非常多的选项可以选择。Auto表示根据内存的SPD信息来设定,通常是一个很慢的值,为了保证最好的兼容性。数值越高表示性能越好,最高可以达到128us,但太高的值可能导致内存数据丢失,因此我们可以一点一点的增加来得到最理想的数值,前提也是系统足够稳定。
  另外根据早期的资料显示,内存存储每一个bit,都需要定期的刷新来充电。不及时充电会导致数据的丢失。DRAM实际上就是电容器,最小的存储单位是bit。每个bit都能随机地访问。但如果不充电,数据只能保存很短的时间。因此我们必须每隔15。6us就刷新一行。每次刷新时数据就被重写一次。正是这个原因DRAM也被称为非永久性存储器。一般通过RAS-only的刷新方法(行刷新),每行每行的依次刷新。早期的EDO内存每刷新一行耗费15。6us的时间。因此一个2Kb的内存每列的刷新时间为15。6usX2048行=32ms。
影响:轻微影响稳定性和内存带宽
建议设置:根据经验,tREF和tRAS一样,不是一个精确的数值。通常15。6us和3。9us都能稳定运行,1。95us会降低内存带宽。此外还有很多未知的值(?。?us),大多数用户发现mhz(?。?us)是一个既稳定性能又好的设置,但也同使用的内存芯片有关。
12、WriteCAS#
Latency(tWCL)
Settings = Auto,
  SDRAM内存是随机访问的,这意味着内存控制器可以把数据写入任意的物理地址,大多数情况下,数据通常写入距离当前列地址最近的页面。tWCL表示写入的延迟,除了DDRII,一般可以设为1T,这个参数和大家熟悉的tCL(CAS-Latency)是相对的,tCL表示读的延迟。
影响:主要影响稳定性,对带宽影响未知。
建议设置:一般用户设为Auto或者1。
DRAMBank Interleave
Settings = Enable, Disable
  这个设置用来控制是否启用interleave模式。Interleave模式允许内存bank改变刷新和访问周期。一个bank在刷新的同时另一个bank可能正在访问。实践表明,由于所有的内存bank的刷新周期都是交叉排列的,这样会产生一种流水线效应。然而,interleave模式只有在出现连续的不同bank的寻址请求时才会起作用,如果处于同一bank,数据处理时和不开启interleave一样。CPU必须等待第一个数据处理结束和内存bank的刷新,这样才能发送另一个地址。目前所有的内存都支持interleave模式,在可能的情况下我们建议打开此项功能。
影响:主要影响带宽和稳定性
建议设置:Enable。Disable会严重影响带宽。
13、DQSSkew
Settings = Auto, Increase
Skew, Decrease Skew
  稳定的电压可以使内存达到更高的频率,电压浮动会引起较大的时间差(skew),加强控制力可以减少skew,但相应的DQS(数据控制信号)上升和下降的边缘会出现电压过高或过低。一个额外的问题是高频信号会引起追踪延迟。DDR内存的解决方法是通过简单数据选通脉冲来增加时钟推进。DDRII引进了更先进的技术:双向的微分I/O缓存器来组成DQS。微分表示用一个简单脉冲信号和一个参考点来测量信号,而并非信号之间相互比较。理论上提升和下降信号应该是完全对成的,但事实并非如此。时钟和数据的失谐就产生了DQ-DQSskew。
影响:轻微影响内存带宽和稳定性
建议设置:Increase性能好,Decrease稳定性好。
14、DQSSkew
Settings = Auto, 0-255
,步近为1。
  当我们开启了DQS skew
control后,这选项用来设定增加或减少的数值。这个参数并不灵敏。
影响:轻微影响带宽和稳定性
建议设置:由于此参数不灵敏,开启"Increase Skew"可设为50-255。
15、DRAMDrive
Settings = Auto, 1-8
,步进为1。
  这个参数用来调节内存数据总线的信号强度,数值越高代表信号强度越高,增加信号强度可以提高超频的稳定性。但是并非信号强度高就一定好,三星的TCCD内存芯片在低强度信号下性能更佳。
  如果设为Auto,系统通常会设定为一个较低的值。对使用TCCD的芯片而言,表现会好一些。但是其他的内存芯片就并非如此了,根据在DFINF4主板上调试和测试的结果,1
3 5 7都是性能较弱的参数,其中1是最弱的。2 4 6
8是性能较好的参数。TCCD建议参数为3
5或7,其他芯片的内存建议设为6或8。
影响:主要影响稳定性
建议设置:TCCD建议参数为3 5或7,其他芯片的内存建议设为6或8。
16、DRAMData Drive
Settings = Levels 1-4,
  这个参数决定了内存数据总线的信号强度,数值越高,信号越强。要处理大负荷的数据流时,需要提高内存的驾驭能力,你可以设为Hi或者High。超频时,调高此项参数可以提高稳定性。此外,这个参数对内存性能几乎没什么影响。所以,除非超频,一般用户建议设为Lo/Low。
影响:主要影响稳定性
建议设置:普通用户建议使用level
1或3,如果开启了CPC,可能任何高于1的参数都会不稳定。部分用户开启CPC后能运行在3。更多的人关闭CPC后2-4都能够稳定运行。当然最理想的参数是开启CPC后设为level4。
17、MaxAsync
Settings = Auto, 0-15
步进为1。  
目前我还没能找到任何关于此项参数的说明,不知道其功能。感觉网友的经验,在进行Everest的LatencyTest时,可以看出一些差别。在我的BH-6上,参数从8ns到7ns在Latency
Test的测试结果中有1ns的区别。从7ns调低6ns后,测试结果又减少了2ns。
影响:轻微影响带宽和稳定性
建议设置:BIOS中的默认值为7ns,建议大家在5-10之间调节。6ns对内存的要求就比较高了,建议使用BH-5和UTT芯片的用户可以尝试一下,但对TCCD不适用。7ns的要求低一些,UTT和BH-5设为7n比较适合超频。8ns对UTT和BH-5就是小菜一碟,8ns时TCCD通常能稳定运行在DDR600,如果想超频到DDR640+就必须设为9ns甚至更高了。
18、ReadPreamble
Settings = Auto,
2.0-9.5ns,步进为0.5。
  这个参数表示DQS(数据控制信号)返回后,DQS又被开启时的时间间隔。Samsung早期的显存资料显示,这个参数是用以提升性能的。DQS信号是双向的,无论从图形控制器到DDRSGRAM还是从DDR
SGRAM都起作用。
影响:轻微影响内存带宽和稳定性
建议设置:Auto其实就是5ns,建议值为4-7ns,越低越好。
19、IdleCycle
Settings = Auto, 0-256
,步进不定
  这个参数表示强制关闭一个内存页面前的memclock数值,也就是读一个内存页面之前重充电的最大时间。
影响:轻微影响带宽,主要影响稳定性。
建议设置:普通内存建议使用Auto。好内存建议尝试16-32,我的BH-5能稳定运行在16。
20、DynamicCounter
Settings = Auto, Enable,
  如果开启这个功能,系统迫使每进入一个内存页面之前调节内部周期限制。也就是说这个参数和前一个idle
cyclelimit是密切相关的,启用后会屏蔽掉idle cycle
limit,并且根据冲突的发生来动态调节。
影响:轻微影响内存带宽和稳定性/主要影响内存带宽和稳定性(根据内存芯片)
建议设置:通常Auto就是Disable了。开启后能提升一点性能,关闭后系统更稳定。有一次我开启后系统就崩溃了,然后我不得不调节其他的参数。
21、R/WQueue
Settings = Auto, 2x, 4x,
8x, 16x。
  此参数表示在判忧器复写和最后一个操作选择之前,DCI(Device
control Interface)的读/写队列的操作时间,和idle
cyblelimit比较类似,但这个参数还会影响内存页面的读/写队列。
影响:轻微影响内存带宽,主要影响稳定性。
建议设置:默认的是16x,也是性能最好的参数。但如果不稳定,或者要超频,就只有降低到8X甚至更低。
22、BypassMax
Settings = Auto, 0x-7x
  此项参数表示判优器选择否决之前,进入DCQ(Dependence Chain
Que?)的迂回时间。仔细研究后,我觉得这个参数会影响内存到CPU的连接。
影响:轻微影响内存带宽和稳定性
建议设置:默认参数为7X。建议4X-7X,此时性能不俗稳定性也不差。
23、32Byte
Granulation
Settings = Auto, Disable
(8burst), Enable (4burst)。
  当必须选择突发计数器时并且是32字节的访问时,这个参数可以优化数据总线的带宽。关闭后达到最佳性能。
影响:轻微影响带宽,主要影响稳定性。
建议设定:大多数情况下,Auto和Disable一样,都是8burst。我还是建议设为Disable,不稳定就设为4burst。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。JVM内存模型你只要看这一篇就够了 - 简书
JVM内存模型你只要看这一篇就够了
我是一只孤傲的鱼鹰
让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这里说的是JVM的内存区域,实际上Java程序还可以调用native方法使用直接内存)。
本文接下来就重点说说这三个区域。
注意这个栈和数据结构中的stack有相似之处,但并不是用户态的。准确的讲它压入的每个栈帧(Stack Frame)是程序指令以及局部变量表,每个方法调用对应一个栈帧。局部变量表包括各种基本数据类型:boolean、byte、char、short、int、float、long、double以及对象的引用。我们需要注意到每个线程都有独立的栈并且是互相隔离的。
栈的大小可以受到几个因素影响,一个是jvm参数 -XSS,默认值随着虚拟机版本以及操作系统影响,从Oracle官网上我们可以找到:
In Java SE 6, the default on Sparc is 512k in the 32-bit VM, and 1024k in the 64-bit VM. On x86 Solaris/Linux it is 320k in the 32-bit VM and 1024k in the 64-bit VM.
我们可以认为64位linux默认是1m的样子。
除了JVM设置,我们还可以在创建Thread的时候手工指定大小:
public Thread(ThreadGroup group, Runnable target, String name , long stackSize)
栈的大小影响到了线程的最大数量,尤其在大流量的server中,我们很多时候的并发数受到的是线程数的限制,这时候需要了解限制在哪里。
第一个限制在操作系统,以ubuntu为例,/proc/sys/kernel/threads-max 和/proc/sys/vm/max_map_count 定义了总的最大线程数(根据资料windows总的来说线程数会更少)和mmap这个system_call的最大数量(也就是从内存方面限制了线程数)
第二个限制自然是在JVM,理论上我们能分配给线程的内存除以单个线程占用的内存就是最大线程数。所以说对Java进程来讲,既然分配给了堆,栈和静态方法区(或叫永久代,perm区),我们可以大致认为
线程数 = (系统空闲内存-堆内存(-Xms, -Xmx)- perm区内存(-XX:MaxPermSize)) / 线程栈大小(-Xss)
注意这只是帮助我们树立一个概念,实际上还有许多因素影响。
栈的大小还影响到一个就是如果单个栈超过了这个大小,就会抛出StackOverflowError,一般来说递归调用是常见的原因。
如何查看线程栈
使用命令 jstack &pid&可以列出当前pid对应jvm的所有线程栈描述,描述主要包括了每个线程的状态以及堆栈内各栈帧的方法全限定名,代码位置。注意这只是为了可阅读性,并不是说栈里存着的就是这些字符串。
截取一段tomcat的jstack输出(线程方面的知识可以参考另一篇拙作《Java多线程你只需要看这一篇就够了》,本文不再赘述):
tomcat的jstack输出片段
2.堆和垃圾收集
对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
分代的内存管理
首先堆可以划分为新生代和老年代。
然后新生代又可以划分为一个Eden区和两个Survivor(幸存)区。
按照规定,新对象会首先分配在Eden中(如果对象过大,比如大数组,将会直接放到老年代)。在GC中,Eden中的对象会被移动到survivor中,直至对象满足一定的年纪(定义为熬过minor GC的次数),会被移动到老年代。
新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )
默认的,Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。
然后讲讲垃圾收集
堆内存和垃圾收集是密不可分的两个主题,讲垃圾收集的资料很多,但总的来说讲的比较混乱,在这里我试图从一个系统的视角展示垃圾收集。
垃圾收集的意义
垃圾收集的出现解放了C++中手工对内存进行管理的大量繁杂工作,手工malloc,free不仅增加程序复杂度,还增加了bug数量。
分代收集。即在新生代和老生代使用不同的收集方式。在垃圾收集上,目标主要有:加大系统吞吐量(减少总垃圾收集的资源消耗);减少最大STW(Stop-The-World)时间;减少总STW时间。不同的系统需要不同的达成目标。而分代这一里程碑式的进步首先极大减少了STW,然后可以自由组合来达到预定目标。
可达性检测
引用计数:一种在jdk1.2之前被使用的垃圾收集算法,我们需要了解其思想。其主要思想就是维护一个counter,当counter为0的时候认为对象没有引用,可以被回收。缺点是无法处理循环引用。目前iOS开发中的一个常见技术ARC(Automatic Reference Counting)也是采用类似的思路。在当前的JVM中应该是没有被使用的。
根搜算法:思想是从gc root根据引用关系来遍历整个堆并作标记,称之为mark,等会在具体收集器中介绍并行标记和单线程标记。之后回收掉未被mark的对象,好处是解决了循环依赖这种『孤岛效应』。这里的gc root主要指:
a.虚拟机栈(栈桢中的本地变量表)中的引用的对象
b.方法区中的类静态属性引用的对象
c.方法区中的常量引用的对象
d.本地方法栈中JNI的引用的对象
复制:主要用在新生代的回收上,通过from区和to区的来回拷贝。需要特定的结构(也就是Young区现在的结构)来支持,对于新生成的对象来说,频繁的去复制可以最快的找到那些不用的对象并回收掉空间。所以说在JVM里YGC一定承担了最大量的垃圾清除任务。
标记清除/标记整理:主要用在老生代回收上,通过根搜的标记然后清除或者整理掉不需要的对象。
整理的过程
清除的过程
这里可以看到清除会产生碎片空间,对内存利用不是很好,但不是说整理优于清除,毕竟整理会更慢。比如CMSGC就是使用清除而不是整理的。
思考一下复制和标记清除/整理的区别,为什么新生代要用复制?因为对新生代来讲,一次垃圾收集要回收掉绝大部分对象,我们通过冗余空间的办法来加速整理过程(不冗余空间的整理操作要做swap,而冗余只需要做move)。同时可以记录下每个对象的『年龄』从而优化『晋升』操作使得中年对象不被错误放到老年代。而反过来老年代偏稳定,我们哪怕是用清除,也不会产生太多的碎片,并且整理的代价也并不会太大。
具体的垃圾收集器
新生代收集器:有Serial收集器、ParNew收集器、Parallel Scavenge收集器
老生代收集器:Serial Old收集器、Parallel Old收集器、CMS收集器、G1收集器
垃圾收集器大家庭
以上所有的垃圾收集器都会发生STW,只不过FGC的STW时间更长。
几款重点研究的垃圾收集器:
CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合,因此我们又叫它低延迟垃圾收集器。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS,注意此时新生代默认使用的是ParNew。CMS采用的基础算法是:标记—清除。
MSCGC vs CMSGC
和普通序列化整理(MSC)区别在于有三个mark阶段(实际上还有个预清理过程,但对于解释清楚CMSGC没有帮助就忽略了)。CMSGC的精髓在于因为做到了不STW的情况下进行mark,我们得到了更短的总STW时间,代价是因为并行mark产生了『脏数据』即在mark的同时又生成了需要mark的对象,我们必须再进行一次STW,并收尾(remark)。
同时,我们要注意到得到更短的STW的同时,我们牺牲了系统吞吐量,CMSGC总吞吐量比ParOld要更低。
作为最新的垃圾收集器,有可能在jdk9中成为默认的垃圾收集器。
主要思路是将新生代老生代进一步分为多个region,每次gc可以针对部分region而不是整个堆内存。由此可以降低stw的单次最长时间,代价是可能在总时间上会更高。
G1GC让系统在整体吞吐量略降的情况下变得更加平滑稳定。
为了比较ParOld,CMSGC和G1GC,附上从某篇博客上转载的评测截图:
静态方法区
最后讲一讲静态方法区,又称为永久代(Perm Generation)。它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
常见的JVM配置包括:
-XX:MaxPermSize=512m
我们有时候会看到java进程报一个错误类似
Exception in thread "State Saver" java.lang.OutOfMemoryError: PermGen space
说明我们此时要调整配置了,或者说代码中有一些bug导致大量的perm区被占用,可能是用到了太多的静态变量(一般怀疑map)或者说用到ASM框架导致产生了大量的类信息。
1.JVM的GC日志的主要参数
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间
-Xloggc:../logs/gc.log 日志文件的输出路径
-XX:+HeapDumpOnOutOfMemoryError //发生OOM的时候自动dump堆栈方便分析
2.如何看垃圾收集策略
jmap -heap &pid&
3.如何实时看堆内存的使用情况
jstat -gcutil [pid] [interval] //实时打印gc情况以及各代内存占用比例
jmap -dump:format=b,file=f1 &pid& //dump内存到二进制文件
jmap -histo [pid]
//按占大小倒序列出内存中的实例类型
4.关于晋升到老年代的条件
对象有两种可能会进入old区:
存活对象过多。在s1和s2都已经溢出了。如果从eden迁往survior区时,发现放不下,则直接进入 old Gen
从eden到s区来回拷贝次数达到一定的数量,总没有回收掉,进入old区。(从eden到survior1迁到,引用持有中,s1中放不下新迁对象,则清理s1,存活对象,晋升入s2;再下次或继续迁移,就把s2中的。准备说,可能是,这些个对象从s1&-&s2来回拷贝一定次数后,会进入old Gen)。这块Servivor Space 调整合适的存活次数 Threshold 通过-XX:MaxTenuringThreshold。但也只是一个建议,最终仍由虚拟机决定
阿里巴巴技术专家
需要内推阿里,蚂蚁金服,菜鸟的可以私信联系我
机器学习爱好者
单词量早日上2w
JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的字节码自适应解析,边解析边运行,然后pc寄存器指向了main函数所在位置,虚拟机开始为main函数在Java栈中预留一个栈帧(每个方法都对应一个栈帧),然后开始...
原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我也不推广,默默的静静的,主要是担心自己坚持不了。以前写过时间事件日志现在也不写了;写过博客也不写了;月记也不写了。 坚持平凡事就是伟大,本来计划一周一篇的,这次...
这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的差异也比较大。 不过文中一些JVM参数示例都是实际项目里调优的结果,还是经受过实战考验的。 目录 JVM简介 JVM结构2.1 方法区2.1.1 常量池2.1....
作者:一字马胡 转载标志 【】 更新日志 日期更新内容备注 新建文章初版 导入 作为Java语言的使用者,不像C++那样需要自己负责内存的申请和释放,因为Java语言有垃圾收集器(garbage collector GC),GC会负责...
Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码 (字节码), 就可以在多种平台上不加修改地运行。 线程共享区域为: 1、ja...
250 终于开始看考研书了 已经浪费了两个月 今天sandman约我玩狼人杀 然后我要写贾老师的作业 就木有和他玩 有点失落唉 不过 其实也还好 因为 今天完成了五个折纸作业 完成了贾老师的读书心得 成就感满满 最近困扰 wide一件事 是要不要参加桃李杯 我已经大三了 我...
恍然如梦初醒,冬至如期而至。离家两年半的第三个冬至,没有太多无以言表的感受,也没有一丝丝幻想,剩下的是对家的思念,对羊肉粉的崇拜与不辜负,貌似吃了冬天就不会冷了,然而我也是道听途说,因为福建的冬天并不冷……
把冬天当夏天过已经不稀奇了,短裤配短袖,早上起来看...
对于很多治疗颈肩问题的手法治疗师来说,很容易忽略、同时也很不容易解决的问题是斜角肌,今天我们从筋膜角度来分析一下斜角肌,知识出处《肌筋膜疼痛与功能障碍》(第一卷) 一、引传痛 一)前、中和后斜角肌传导的疼痛向前达到胸部;向外侧到达上肢;向后到达肩胛骨内缘和相邻的肩胛间区。 ...
一双鞋, A品牌6百多; B品牌4百多; 没有品牌可能只要2百多。 所以, 出身很重要。 一双鞋, 在地摊不过几十元, 到了商场、专卖店, 会涨到一百甚至几百。 所以, 你待在什么地方很重要。 一双鞋, 只有合脚、合意了, 才能卖出去。 所以, 沟通了解很重要。 一双鞋, ...}

我要回帖

更多关于 开心斗狼人杀版本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信