仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 542|回复: 8
打印 上一主题 下一主题

[学习教程] 发布一篇JVM调优总结(九)-新一代的渣滓接纳算法

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:03:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。
渣滓接纳的瓶颈
传统分代渣滓接纳体例,已在必定水平上把渣滓接纳给使用带来的包袱降到了最小,把使用的吞吐量推到了一个极限。可是他没法解决的一个成绩,就是FullGC所带来的使用停息。在一些对及时性请求很高的使用场景下,GC停息所带来的哀求聚积和哀求失利是没法承受的。这类使用大概请求哀求的前往工夫在几百乃至几十毫秒之内,假如分代渣滓接纳体例要到达这个目标,只能把最年夜堆的设置限定在一个绝对较小局限内,可是如许无限制了使用自己的处置才能,一样也是不成吸收的。
分代渣滓接纳体例的确也思索了及时性请求而供应了并发还收器,撑持最年夜停息工夫的设置,可是受限于分代渣滓接纳的内存分别模子,其效果也不是很幻想。
为了到达及时性的请求(实在Java言语最后的计划也是在嵌进式体系上的),一种新渣滓接纳体例呼之欲出,它既撑持短的停息工夫,又撑持年夜的内存空间分派。能够很好的办理传统分代体例带来的成绩。
增量搜集的演进
增量搜集的体例在实际上能够办理传统分代体例带来的成绩。增量搜集把对堆空间分别成一系列内存块,利用时,先利用个中一部分(不会全体用完),渣滓搜集时把之前用失落的部分中的存活对象再放到前面没有效的空间中,如许能够完成一向边利用边搜集的效果,制止了传统分代体例全部利用完了再停息的接纳的情形。
固然,传统分代搜集体例也供应了并发搜集,可是他有一个很致命的中央,就是把全部堆做为一个内存块,如许一方面会形成碎片(无法紧缩),另外一方面他的每次搜集都是对全部堆的搜集,没法举行选择,在停息工夫的把持上仍是很弱。而增量体例,经由过程内存空间的分块,恰好能够办理下面成绩。
GarbageFirest(G1)
这部分的内容次要参考这里,这篇文章算是对G1算法论文的解读。我也没加甚么工具了。
方针
从计划方针看G1完整是为了年夜型使用而筹办的。
撑持很年夜的堆
高吞吐量
--撑持多CPU和渣滓接纳线程
--在主线程停息的情形下,利用并行搜集
--在主线程运转的情形下,利用并发搜集
及时方针:可设置在N毫秒内最多只占用M毫秒的工夫举行渣滓接纳
固然G1要到达及时性的请求,绝对传统的分代接纳算法,在功能上会有一些丧失。
算法详解

G1可谓博采众家之长,力图抵达一种完善。他吸收了增量搜集长处,把全部堆分别为一个一个等巨细的地区(region)。内存的接纳和分别都以region为单元;同时,他也吸收了CMS的特性,把这个渣滓接纳历程分为几个阶段,分离一个渣滓接纳历程;并且,G1也认同分代渣滓接纳的头脑,以为分歧对象的性命周期分歧,能够接纳分歧搜集体例,因而,它也撑持分代的渣滓接纳。为了到达对接纳工夫的可估计性,G1在扫描了region今后,对个中的活泼对象的巨细举行排序,起首会搜集那些活泼对象小的region,以便疾速接纳空间(要复制的活泼对象少了),由于活泼对象小,内里能够以为多半都是渣滓,以是这类体例被称为GarbageFirst(G1)的渣滓接纳算法,即:渣滓优先的接纳。
<p>
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?
再见西城 该用户已被删除
沙发
发表于 2015-1-20 13:17:07 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
因胸联盟 该用户已被删除
板凳
发表于 2015-1-24 23:45:10 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
再现理想 该用户已被删除
地板
发表于 2015-1-31 20:03:55 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
兰色精灵 该用户已被删除
5#
发表于 2015-2-6 21:56:56 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
变相怪杰 该用户已被删除
6#
发表于 2015-2-18 20:53:32 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
admin 该用户已被删除
7#
发表于 2015-3-13 00:07:21 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
老尸 该用户已被删除
8#
发表于 2015-3-13 00:07:21 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
只想知道 该用户已被删除
9#
发表于 2015-3-20 06:13:07 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 14:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表