荣耀要出荣耀电视?

荣耀掌门人刘江峰2014年7月13日晚23点发出一篇看世界杯的微博,说身边没有电视,但是拿到了一款新品,痛痛快快看球了。。。 不禁让人浮想联翩,荣耀要出电视了?还是出一款荣耀平板?。。。。 欧耶,一起期待吧。。。。

2014年7月15日 · 1 分钟

[翻译]G1垃圾收集器(八) 之 总结

在本教程,你已经对java虚拟机中的G1垃圾收集器有了大概的了解,首先你学习了堆内存以及GC为什么是java虚拟机里的关键组成部分。接下来你学习了CMS GC和 G1 GC两款GC是如何工作的。后面又学习了G1的命令行参数,和使用它们进行最佳实践。最终你学习了GC日志中包含的日志和数据有关的信息。 在本教程,你学到了: java JVM的组成 G1 GC的概述 回顾了CMS收集器 回顾了G1收集器 命令行参数和最佳实践 关于G1的日志 资源 获取更多的信息或者相关的知识,可以访问以下站点或者链接 Java HotSpot VM Options The Garbage First(G1) Garbage Collector Poonam Bajaj G1 GC Blog Post Java SE 7: Develop Rich Client Applications Java Performance - Charlie Hunt and Binu John Oracle Learning Library 感谢 课程开发者:Michael J Williams 校正:Krishnanjani Chitta

2014年7月14日 · 1 分钟

相比荣耀6,小米4可能有什么?

小米终于耐不住寂寞将于2014年7月22日发布自己的全新产品小米4了。在这里我们猜测一下相对于全能王荣耀6,小米4可能有什么。 1、首先可以猜到的是小米4将使用苹果的金属一体成型技术。这就是说小米4的外观将又有所改变。我们知道小米3相较于小米2,外观上进行了很大改变,上下屏幕之外的部分很多,边框很宽,整体风格抄袭lumia,被很多人诟病。 这次小米4的外观,又要进行很大的改变,首先它不能过分的抄袭苹果,其次它不能抄袭锤子和荣耀6。那么在金属一体成型的技术重在体现手机的整体感,小米采用这种技术,外观的设计发挥余地很小,除非小米敢承担这部分工艺成本,虽然金属一体成型技术可能是个亮点,但是我还是觉得小米4的外观这次又要被吐槽了。 2、内存和CPU 要想与目前的主流性价比超高的手机抗衡。内存3G 和 8核CPU是少不了的。小米一向喜欢弄个“全球首发”的噱头,我想这次肯定也不例外。CPU移动的可能用英伟达的,联通的可能用高通还未量产的骁龙810。除非小米不要追逐麒麟920的cat6。 根据以往的经验, 小米2 2012年8月16日发布 2012年10月30日销售 小米3 2013年9月5日发布 2013年10月15日移动版发布 2013年12月31日联通版发布。 使用英伟达的移动版小米4,你可能在8月底才可以拿到。至于使用全球最快的CPU的联通版小米4,你可能要到3到4个月之后拿到了。 3、屏幕 小米一向在屏幕上不敢下血本的,屏幕一直使用IPS屏幕材质,相反荣耀系列一直在使用LTPS.小米3用的是OGS全贴合技术,这次可能会向荣耀6看齐。0GS比IN-CELL通透性和成品率上要高。小米3选用OGS无疑是为了降低成本。IN-CELL虽然技术难度大,成品率低,但是比OGS更轻薄,屏幕轻度高,触控灵敏度低。 4、操作系统 MIUI是小米的一个优势,这次如果出个MIUI V6可能会有更大优势,在我看来,安卓操作系统的定制已经走到一个举步维艰的状态,我觉得MIUI不会太多的惊喜,雷军在引入虎哥之后,可能在性能、功耗、优化等啥啥的上面有所标榜。

2014年7月13日 · 1 分钟

国际范P7和屌丝范荣耀6

自荣耀6发布以来,好多人认为荣耀6的定价是对之前发布的P7的一个冲击,是自己把自己搞死了,为什么荣耀6的那么高的配置,会比P7还便宜呢?我觉得这应该和产品定位不同,追求不同,面向人群不同,销售市场渠道不同有关。 P系列手机,一直是华为的旗舰机,P1是华为高端手机的发迹产品,从华为P1开始,华为的高端机从此被市场承认。从P1 P2 P6 到现在的P7,P系列一直走的是高端路线,讲的是超薄,优雅和商务,它可能没有超高性能的配置。但是它有高级顶端的工艺,和超级用心的艺术设计。可以说它卖的更多的不是机器,而是工艺。 它面向的用户不是普通消费者,它面向的国际主流的用户的手机认识,还有一些商务人士,或者讲对苹果手机比较热衷,对手机当艺术品追求的人们。 华为P7,并不依赖于网络出售,它的销售渠道更多的是专卖店,运营商。这个做法和iphone类似。2888元这样裸机价格,会凸显实体店的打折优惠以及运营商套餐价格的优惠。让华为P7的合作伙伴们得到更大的利益。同时这样的价格会让华为P系列一直走顶级工艺,高端设计的路线。 再看荣耀系列,从荣耀1代开始,直到荣耀3c 3x,华为荣耀才找清楚自己的定位,荣耀要做一部性价比高的手机,就像荣耀总裁刘江峰说的:好多年轻人都和他说想要一部内存更大,运行更快,摸起来不要太烫,看起来更漂亮,拍照更清晰…的手机。可能这就是华为荣耀的定位,追求的是更高的性能,最佳的性价比。 首先价格便宜也是这部分人所希望的。而华为正好是有这方面能力的,它有自己的工厂,有自己的CPU,有20年通信行业的积累。它有别的手机厂商所无法具备的超高性价比的控制能力。别的厂商可能为了降低价格,会牺牲工艺来满足制造成本,牺牲质量来满足产量和尽早的上线出售。这是一方面,再加上华为荣耀也采用互联网销售,省去了中间的利益环节,所以华为荣耀在国内千元机市场是有绝对的优势的, 综上所述,荣耀6和华为P7并不冲突,首先荣耀6的优点是超高性价比,同时有质量和价格优势。华为P7的优点是顶尖工艺,高端设计。其次荣耀6面向的互联网销售,华为P7是传统销售渠道,P7的海外销售市场占很大比例。换句话说荣耀6走的是屌丝逆袭的道路,P7走的高富帅的国际范。

2014年7月11日 · 1 分钟

[翻译]G1垃圾收集器(七) 之 G1 GC记录日志

最后一个主题,我们主要介绍使用日志信息分析G1 GC的性能。本节提供了在日志中打印关于垃圾收集的数据和信息的开关选项。 设置日志详情 有可以设置日志详情到三种不同的级别 (1) -verbosegc (等同于 -XX:+PrintGC) 设置日志到 fine 级别. 例子: [GC pause (G1 Humongous Allocation) (young) (initial-mark) 24M- >21M(64M), 0.2349730 secs] [GC pause (G1 Evacuation Pause) (mixed) 66M->21M(236M), 0.1625268 secs] (2) -XX:+PrintGCDetails 设置为 finer 级别. 这个选项输出下面的信息 平均、最大和最小的暂停时间 根区域扫描, RSet 刷新(包括处理缓存信息), RSet扫描, 对象复制, 消亡(包括尝试的次数). 还包括其它操作使用的时间,例如CSet的选择, 引用的处理, 引用队列的入列,还有Cset的释放 显示Eden, Survivors区域以及总堆内存的占用情况 例子: Ext Root Scanning (ms): Avg: 1.7 Min: 0.0 Max: 3.7 Diff: 3.7] [Eden: 818M(818M)->0B(714M) Survivors: 0B->104M Heap: 836M(4096M)->409M(4096M)] (3) -XX:+UnlockExperimentalVMOptions -XX:G1LogLevel=finest 设置到finest级别,内容就行finer级别的一样,再加上每个工作线程的信息 例子: ...

2014年7月10日 · 3 分钟

[翻译]G1垃圾收集器(六) 之 命令行选项和最佳实践

命令行选项和最佳实践 在这个章节,让我们一起看看G1的每个命令行选项。 基本的命令行选项 启用G1 GC,使用选项:-XX:+UseG1GC 这是一个最简单的命令行,来启动下载的JDK自带的demos和例子中的Java2Demo java -Xmx50m -Xms50m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar 关键的命令行开关 -XX:+UseG1GC - 告诉JVM,使用G1 GC -XX:MaxGCPauseMillis=200 - 设置一个目标最大暂停时间. 这是一个理想化的目标,JVM会尽可能的完成它. 因此,这个目标不一定能达到。默认是200ms。. -XX:InitiatingHeapOccupancyPercent=45 - 整个堆栈使用达到百分之多少的时候,启动GC周期. 基于整个堆,不仅仅是其中的某个代的占用情况,G1根据这个值来判断是否要触发GC周期, 0表示一直都在GC,默认值是45(即45%慢了,或者说占用了) 最佳实践 在使用G1的时候,下面几个最佳实践你需要遵循 不要设置年轻代大小 显式的使用-Xmn设置年轻代的大小,会干预G1的默认行为。 G1就不会再考虑设定的暂停时间目标,所以本质上说,设定了年轻代大小就相当于禁用了目标暂停时间 G1就无法根据需要增大或者缩小年轻代的小心。既然大小固定了,就无法在大小上做任何改变了。 响应时间指标 不要根据平均响应时间(ART)作为衡量标准去设定XX:MaxGCPauseMillis=<N>选项,而是设定一个想在90%或者以上的时间都会满足这目标的值。也就是说90%的用户,都会在目标时间,甚至更短的时间内得到响应。记住设定的目标时间只是一个目标,不能保证永久都会满足这个目标。 什么是释放(撤销?)失败? 一个JVM当在回收存活或者晋升对象的时候,栈区域溢出了就会发生失败,因为堆的使用已经到达了最大值,不能再扩展。使用-XX:+PrintGCDetails选项,你会看到to-space overflow的日志。这个过程代价很高的。 GC还必须继续对内存进行释放 拷贝不成功的对象继续留在原来的区域 对CSets中对区域的RSets任何更新都要重新生成 所有这些过程代价都是很高的 怎么避免释放(撤销?)失败? 为了避免放失败,考虑使用下面的选项: 增大堆(内存)大小 增大-XX:G1ReservePercent=n,默认是10 G1会预留一部分内存,制造一个假天花板,防止to-space的方式。 早点启动标记周期 增大并行标记的线程数,使用-XX:ConcGCThreads=n选项 G1 GC的开关选项完全列表 下面是G1 GC的所有的开关选项的列表,记得通过上面提到的最佳实践: 选项和默认值 描述 -XX:+UseG1GC 使用G1 GC -XX:MaxGCPauseMillis=n 设置一个暂停时间期望目标,这是一个软目标,JVM会近可能的保证这个目标 -XX:InitiatingHeapOccupancyPercent=n 内存占用达到整个堆百分之多少的时候开启一个GC周期,G1 GC会根据整个栈的占用,而不是某个代的占用情况去触发一个并发GC周期,0表示一直在GC,默认值是45 -XX:NewRatio=n 年轻代和老年代大小的比例,默认是2 -XX:SurvivorRatio=n eden和survivor区域空间大小的比例,默认是8 -XX:MaxTenuringThreshold=n 晋升的阈值,默认是15(译者注:一个存活对象经历多少次GC周期之后晋升到老年代) -XX:ParallelGCThreads=n GC在并行处理阶段试验多少个线程,默认值和平台有关。(译者注:和程序一起跑的时候,使用多少个线程) -XX:ConcGCThreads=n 并发收集的时候使用多少个线程,默认值和平台有关。(译者注:stop-the-world的时候,并发处理的时候使用多少个线程) -XX:G1ReservePercent=n 预留多少内存,防止晋升失败的情况,默认值是10 -XX:G1HeapRegionSize=n G1 GC的堆内存会分割成均匀大小的区域,这个值设置每个划分区域的大小,这个值的默认值是根据堆的大小决定的。最小值是1Mb,最大值是32Mb

2014年7月9日 · 1 分钟

[翻译]G1垃圾收集器(五) 之 G1 GC的步骤(下)

G1的老年代GC 像CMS收集器一样,在老年代的GC上,G1 GC被设计成一个低暂停的收集器。下面的表格描述了G1 GC在老年代上收集的各个阶段。 G1收集阶段-并行标记阶段周期 G1老年代收集的各个阶段如下,请注意有些阶段也是年轻代GC的一部分。 阶段 描述 初始化标记(stop_the_world事件) 这是一个stop_the_world的过程,是随着年轻代GC做的,标记survivor区域(根区域),这些区域可能含有对老年代对象的引用。 根区域扫描 扫描survivor区域中对老年代的引用,这个过程和应用程序一起执行的,这个阶段必须在年轻代GC发生之前完成。 并发标记 查找整个堆中存活的对象,这也是和应用程序一起执行的。这个阶段可以被年轻代的垃圾收集打断。 重新标记(stop-the-world事件) 完成堆内存活对象的标记。使用了一个叫开始前快照snapshot-at-the-beginning (SATB)的算法,这个会比CMS collector使用的算法快。 清理(stop-the-world事件,并且是并发的) 对存活的对象和完全空的区域进行统计(stop-the-world) 刷新Remembered Sets(stop-the-world) 重置空的区域,把他们放到free列表(并发)(译者注:大体意思就是统计下哪些区域又空了,可以拿去重新分配了) 复制(stop-the-world事件) 这个stop-the-world的阶段是来移动和复制存活对象到一个未被使用的区域,这个可以是年轻代区域,打日志的话就标记为 [GC pause (young)]。或者老年代和年轻代都用到了,打日志就会标记为[GC Pause (mixed)]。 G1老年代手机的详细步骤 根据上面的阶段定义,来让我们看看他们都是和老年代怎么交互的。 6、初始化标记阶段 初始化标记,是在年轻代垃圾回收的过程中发生的,在日志中标记为GC pause (young)(inital-mark). 7、并发标记阶段 如果空的区域发现(图中标记为“X”),他们就会在重新标记阶段被立即清除掉,同时决定活跃度的统计信息也会计算到。 8、重新标记 空的区域被删除回收,同时计算所有区域的区域活跃度 9、复制和清理阶段 G1 GC会选择活跃度最低的区域进行收集,因为这些区域的垃圾收集会更快一点,在收集的过程中,年轻代的GC也可能同时发生,所以在GC的日志中标记为 [GC pause (mixed)],意思就是年轻代的GC和老年代的GC可以同时发生。 10、复制和清理阶段之后 那些选择收集的区域,存活对象会被压缩到图中标注的深蓝色区域和深绿色区域。 ...

2014年7月8日 · 1 分钟

[翻译]G1垃圾收集器(五) 之 G1 GC的步骤(上)

G1 GC采用不同的方式分配内存,下面这些图片用来解释G1系统的原理 1、G1的堆结构 堆是一块内存区域分成许多固定大小的区域 区域的大小由JVM启动的时候决定的,一般在1-32M范围内,大约生成2000个左右。 2、G1堆的分配 事实上,这些区域在逻辑上被映射到三大区:Eden, Survivor, 和老年代 图片中的颜色表示了区域和它被赋予的角色,存活的对象被腾挪(复制或者拷贝),从一个区域到另一个区域。区域中的收集被设计成和应用程序并行的。 如图所示,区域可以被分配为Eden, Survivor, 和老年代区域,此外还有第四种,我们称之为Humongous区域。这些区域被设计为保存一个标准区域大于50%的对象。他们被存储为一块连续的区域。这种类型的区域必须是没有被使用的区域(译者注:翻译到这里,暂且不明白,接着往下读) 注:在写这篇文章的时候,对Humongous对象的收集还没得到优化,你应该避免创建这样打的对象。(译者注:更云里雾里了,这个Humongous是指一个区域的类型,还是一些对象的类型呢?) 3、G1中的年轻代 堆被分成接近2000块区域,最小1Mb,最大32Mb。蓝色区域存储老年代对象,绿色区域存储年轻代对象。 注:这些区域不需要像老的GC那样必须是连续的 4、G1中年轻代的收集 存活的对象被复制或者移动到一个或多个survivor区域,如果满足老化阈值,这些对象就会被晋升到老年代(译者注:老化、晋升的概念就是说,一个对象在经历n个周期的收集仍然存活,这个对象就是可能被程序长期持有不愿释放的对象,这个对象就算是老化了,晋升到老年代) 这个阶段会发生stop the world的暂停,Eden和survivor的大小需要计算,为了进入下一次的年轻代收集,一些信息的统计也同时进行,为了帮助这个计算。设定的目标暂停时间也会纳入考虑的因素。 这个方法让改变这些区域大小变的容易,根据需要增大或者减少。 5、年轻代GC之后 存活的对象已经被复制或者移动到survivor和老年代区域。 刚晋升的对象如深蓝色所表示,绿色的表示survivor区域 总结一下,关于年轻代的GC有如下几点: 一整块堆内存被分成多个小区域 年轻代是由一些列的不连续的区域组成的,这有助于随时改变它的大小 年轻代的垃圾收集,或者称年轻代GC,是stop-the-world的一个事件,所有的应用程序线程必须停止,等待这个操作完成。 年轻代的GC,又多个线程并行处理 存活的对象被复制或者移动到新的survivor区域或者老年代区域

2014年7月7日 · 1 分钟

[惊喜]百度广告从基础升通用了

从建站伊始我就加入了百度联盟,加入百度联盟门槛不高: 1、有内容,你的网站必须有一定的内容,合法的。如果你刚刚建站,就几篇文章可能会申请失败,你需要充实之后再次申请。 2、有备案,如果你是个国内网站你必须有备案,不过如果你是香港主机或者境外网站的就不需要了。 满足这两个条件就可以在百度联盟网站注册一个用户,中间要验证下自己的网站。就可以投放自己的广告了。 你的网站有两个等级:基础和通用。如果你的网站流量很大,或者内容很丰富,上来审核员可能就给你一个通用级别。那下面的问题就不需要看了。 如果你的网站流量不是很大,内容还不怎么丰富,那你就是基础级别,然后你无论投放的什么百度广告,都是显示的主题广告。主题广告的原理很简单,就是百度联盟广告js,会从你投放广告的页面抓取内容,提取关键字以链接显示出来,用户点击你的主题链接,就会进入围绕这个主题的百度广告页面。这样单调的广告,肯定让你的网站看着很丑陋。 为此我们要努力从基础变成通用,变成通用的条件,一是流量,而是内容,像一个网站的流量基本来源于搜索引擎,所以最终还是要从内容着手,主要从以下几方面 第一:虽然联盟广告,你目前只能做主题广告,但是你也要多加几个,增加展现量。 第二:百度联盟和百度统计是相通的,我相信百度联盟的广告统计展现量是用了百度统计的相关技术,或者是数据有共享,你的网站要加入百度统计代码,不要用cnzz的。 第三:你的网站一定要主题明确,因为百度联盟的广告原理就是根据你的网站内容推送相近内容的广告,所以你一定要围绕一个主题充实你的网站。这就是SEO的话题了,关于SEO其它方面的建议,你可以参考我的《SEO我做了哪些优化》《SEO我做了哪些优化(续)》,或者其它网站的资料。 第四:最重要的还是坚持每天更新原创内容。我就是每天都坚持更新一篇自己原创的文章,最终从基础变成通用的,虽然我的每天的网站流量不是很大。我想我只所以从基础变成通用,是因为百度联盟检测到我的内容原创度高,内容丰富了。百度搜素检测文章是否远程的算法还是有一套的,我发现我之前关于《java多线程学习》的几篇总结,一直没有被收录,这是因为关于这方面的内容,网上实在太多了。你的内容是否原创度高,百度搜索索引量是个间接的反映。

2014年7月7日 · 1 分钟

[翻译]G1垃圾收集器(三) 之 G1垃圾收集器

G1 GC 垃圾优先收集器(G1 GC) 是一个服务器型的垃圾收集器,它的目标是大内存,多处理器的机器。高概率的满足一个垃圾回收暂停时间的目标下,实现大吞吐量。(译者注:例如设置的垃圾回收暂停时间是200ms,G1可以保证90%的垃圾回收暂停时间都在200ms以内,从而保证大的吞吐量),在jdk1.7update4 及其以后的版本完全支持G1 GC,G1 GC主要是为下面这样的应用设计的: 就像CMS收集器一样,可以和应用线程并行处理 紧凑的空间,不会因为GC导致长时间的暂停 GC的暂停时间,希望更多的是可以预见的(译者注:意思就是说,大部分GC时间都是可以控制的,因为G1可以保证90%的GC都在目标时间以内) 不想牺牲大吞吐量的性能 不需要更大的内存 G1 GC的长期计划,就是为了替代CMS GC。比较CMS GC和G1,他们很多不同点表明G1 GC是个更好的解决方案。其中一个不同点就是G1是一种压缩收集器,G1对堆栈的充分压缩,可以避免使用细粒度的未分配内存列表去分配内存,而是使用region的概念。这大大简化了收集器的部分,更大程度上消除了潜在的碎片问题。此外,G1比CMS提供了更多的对收集暂停时间的预测,允许用户设定暂停时间期望目标。 G1操作概述 老的垃圾收集器(像serial,parallel,CMS),全部把堆栈划分成三个区域:年轻代,老年代,以及固定大小的永久代。 所有的对象,最终在三个区域中的一个中消亡。 G1 GC采用不同的方式: 堆被分成一组大小相等的区域,每一块区域对应虚拟机的一片连续内存。他们就像那些老的GC一样,也分成三组(Eden,Survivor,Old)。但是这三种区域没有固定的大小,这在内存使用上提供了更大的灵活性。 G1 GC的执行过程,和CMS有很大类似,G1首先并行进行一个全局的标记,来确认堆内的所有对象的活跃度。在经过标记阶段之后,G1 GC就知道哪些区域大部分都是闲置的。G1 GC首先收集那些可以产生大片空白内存的区域,这就是为什么G1 GC被称为垃圾优先。就像名字一样,G1 GC聚焦它的收集和压缩能力在那些就要被可回收对象(也就是垃圾占满的区域。G1有一个可预测的时间暂停模型,可以让用户指定一个目标,这个模型基于实现这个目标来选择每次收集的区域的个数。 那些有G1确认已到回收时机的区域使用撤离的方式进行回收垃圾。G1从一个或者多个区域中复制对象集中到一个区域中,在复制的过程中进行压缩和释放内存。这个撤离的过程在多处理器中是必行处理的,目的就是减少暂停时间和增大吞吐量。因此每次垃圾收集,G1 GC都要在用户设定的暂停时间内不断的工作,以减少碎片的产生。CMS收集器不会做压缩工作,老的Parallel收集器之做全堆的压缩,这会导致相当大的暂停时间。 有一点要特别注意,G1 GC不是一个实时的收集器,它只是说更大可能的满足你设定的暂停时间,但是也不是一定的。通过前面的收集,G1 GC会大体估算出来在你指定的目标时间内能够收集多少区域。因此G1 GC有一个对收集成本的考量模型,G1 GC通过这个模型来决定哪些,多少区域需要收集来保证这个暂停时间目标。 注意:G1 GC有并发和并行的两种阶段,例如refinement, 标记, 清除阶段,是并发执行,stop-the-word是并行处理的(译者注:并发和并行的概念要研究下)。Full GC仍然是单线程处理的,但是如果你调优的恰当,这种情况是可以避免的。 G1 自占内存 如果你是从老的Parallel GC或者CMS GC转到G1,你会发现更的进程占用,这主要和统计类的数据结构有关,例如Remembered Sets和Collection Sets。 Remembered Sets简称RSets,跟踪一个区域内对象的引用,在堆内,每一块区域对应一个RSet。RSets能让每个区域的收集都是独立并行的。RSets整体占小于5%的内存。 Collection Sets 简称CSets,是GC中需要收集的区域的集合,在一个GC过程中,CSets中所有的活动的数据都要被挪动(包括移动和复制),CSets可以是Eden, survivor, old任意类型的区域,Csets对jvm的大小(译者注:只要是说内存吧)有小于1%的影响。 推荐使用G1 GC的情形 G1第一个关注点是,为那些需要大内存,低GC时延的应用提供一个解决方案。也就是说内存可以到6G甚至更大,可以保证在0.5秒以下稳定的暂停时间。 使用CMS GC和老Parallel GC的应用程序,在有以下一个或者多个特征的情况,比较适合切换到G1 GC: ...

2014年7月6日 · 1 分钟

[翻译]G1垃圾收集器(四) 之 回顾GC以及CMS

回顾分代GC和CMS、 并发标记扫描收集器(CMS),也被称作低暂停并发收集器。它是回收老年代。它试图利用和应用线程并发的收集尽可能多的垃圾,以减少因为垃圾收集导致的停顿。通常这种低延迟并发收集器不会对活动的对象进行压缩处理,也就是说它只做一个不对对象进行移动的垃圾回收,那么配分一个更大的内存的时候,碎片就会成为一个问题。 注意:CMS收集器在年轻代中使用和parallel 收集器相同的算法。 CMS收集阶段 CMS收集器在堆的老年代的回收上有以下几个阶段: 阶段 描述 初始化标记 (stop-the-world事件) 标记老年代中依然存活的对象,包括那些从年轻代晋升来的,这个过程通常比较短暂(译者注:存活我理解为被程序引用,不可回收的对象) 并发标记 和应用程序并发执行的,扫描整个老年代,是从那些标记的对象,或者间接标记的对象开始扫描。第2、3、5个阶段是并发执行的,在这个过程中,在CMS的代中新分配的对象(包括晋升的对象)会被立即标记为存活状态。 重新标记 (stop-the-world事件) 该阶段发现那些被并发标记错过的对象,因为并发标记是和应用程序并发执行的,在标记线程完成对某个对象的跟踪那刻,应用程序可能对对象进行了更新。 并发清理 收集那些在标记阶段没有标记的对象,消亡对象所占的空间会被添加到释放列表里用于重新分配,对死亡对象的聚集工作就发生在这个点。注意:存活的对象不会被移动。 并发重置 做一些数据结构的清理工作,为下一次收集做准备 回顾垃圾收集的步骤 接下来,让我们回顾一下CMS GC的操作步骤: 1、CMS GC的堆结构 整个堆被分成三个部分 年轻代被分割成一个Eden和和两个survivor区域,老年代是延续空间,对象的收集就在这片区域,没有压缩操作直到一个full GC发生。(译者注:读到这里,我们应该很清楚压缩的意思就是说不仅仅对垃圾对象进行收集,还对存活的对象进行腾挪,聚集在一起,腾出更多的空间,不要让对象散落在不同的空间,这就是内存碎片,内存碎片导致无法分配一块连续的大内存) 2、在CMS中,年轻代的GC是怎么工作的? 年轻代被标记为绿色,老年代为蓝色,你的JAVA程序在运行一段时间后,可能会像下面这个样子.对象分散的分布在老年代中: 使用CMS,老年代是对象消亡的地方,它们不会被移动,也不会被压缩,除非遇到一个Full GC. 3、年轻代的收集 存活的对象从 Eden 区域或者一个 survivor区域,移动到另外一个survivor区域,一些老的对象如果达到了晋升阈值,就会被提升到老年代中。 4、年轻代GC之后 年轻代的收集之后,Eden区域和其中一个survivor区域会被清理 新晋升的对象是深蓝色区域,绿色区域年轻代中存活下来,还没有晋升到老年代的对象。 5、CMS中老年代的收集 两次stop_the_world的时间是初始化标记和重新标记阶段,当老年代达到一定的占有率,CMS才开始登场了。 (1)初始化标记是对存活的对象进行标记,只有短暂的停顿(2) 并发标记阶段,是和应用程序一起执行的,也害死标记存活的对象。最终在第(3)阶段去标记那些上一阶段(2)遗漏的对象。 6、老年代的收集-并发清理 在上一阶段没有被标记的对象会在这里消亡,这里没有压缩。 ...

2014年7月6日 · 1 分钟

安兔兔是否在排名上有猫腻?

自从@华为荣耀 官方微博在荣耀6前爆料,荣耀6将登顶安兔兔跑分天王,安兔兔这只兔子就开始不淡定了,先是有人提醒@华为荣耀 安兔兔已经归于雷军麾下,然后就有人爆料,安兔兔连夜升级到安兔兔V5,要把荣耀6斩于发布会前夕。 荣耀6当天发布会,荣耀掌门人刘江峰当众使用安兔兔跑分,安兔兔显示荣耀6跑分成绩已经超过40000分。但是安兔兔迟迟不予更新,两天之后在官方网站上才不得不公布荣耀6已经成为新的跑分天王,但是跑分成绩却有出入,仅仅显示37280分。 同时一直在手机安兔兔上排名第四,分数不足35000分的小米3,不知为何一下超越它之前的HTC one,三星Galaxy S5,三星Galaxy Note3,排在了第一名华为荣耀6、第二名一加手机的后面。 更有小米3的网友爆出,使用安兔兔新放出来的V5版本,测试小米3,分数竟然达到了42000分,硬生生多出来近10000分,竟然超越了荣耀6,无语,你这小米3都发布n久了,难不成,它自己的cpu会进化,内存自己会生小宝宝? 我在想,安兔兔你自己都没个标准准绳,你怎么给人家评分?荣耀6就让雷军你这么不淡定吗?你一个TD,丑不垃圾的3G手机跑不过一个3G内存,八核LTE的手机,有什么不正常的吗?强烈鄙视安兔兔,鄙视雷不斯。

2014年7月6日 · 1 分钟

[翻译]G1垃圾收集器(二) 之 java技术和JVM

java概述 java是一门编程语言和计算平台,第一个版本有Sun 微系统公司在1995年发布,它是支撑java程序,包括公用事业,游戏,和商业等应用的底层技术。java程序跑在全球超过850万的个人电脑,以及数十亿的设备中,包括移动电话和电视设备。java是有一些关键组建的集合,作为一个整体,构建了所谓的java平台 java运行时版本(JRE) java是一门面向对象的编程语言,包括以下几方面特性: 平台无关性,java应用程序,被编译成字节码,存储在类文件中,并在jvm中加载执行。既然java是运行在jvm中,那么它可以在任意不同的操作系统和设备中运行。 面向对象,java作为一门面向对象的语言,获取了C/C++的一些语言特性,并加以改进。 自动垃圾回收机制,Java自动分配和释放内存,所以程序不用承担这份任务。 丰富的标准库,java预置了大量的对象,用于实现各种功能,包括关于输入/输出,网络,日期等方面的操作。 java开发工具包(JDK) JDK是开发java程序的一些工具的集合。使用JDK,你可以编译你用java写的程序,并在JVM中运行它,此外JDK还提供打包、发布你的应用的工具。 JDK和JRE有一样的java应用程序接口(API),JAVA API是提供给开发者开发应用,预先打包的一些类库的集合,这些JAVA API让开发者在开发一些常用功能的时候变的很容易,包括字符串的操作,日期和时间的处理,网络相关。还实现了一些数据结构(例如:链表,map,栈,队列等) java虚拟机(JVM) java虚拟机是一个抽象的计算机,JVM是一个程序,就像一个虚拟的机器,可以让写的程序在上面执行,这样每一个java程序,都是面向同一份接口和类库。针对每一种操作系统,java虚拟机都可以把java程序翻译成操作系统对应的指令,所以java程序是不依赖平台的。 jvm的第一份原型是有sun公司开发的,在一个在手持设备上类似个人数字助理软件中,实现了jvm的指令集。目前oracle公司虽然在手机、桌面或者服务器设备上实现了jvm。但是jvm并不限定特殊的实现技术,主机硬件和主机操作系统。可能这个解释不是很确切,但是的确对于一个硅晶体管CPU,通过编译它的指令集来就可以实现(JVM),或者通过微码,甚至直接通过硅晶体管来实现,也不是不可能实现的。 jvm对于java语言写的程序是不认识的,它只认一种特殊的二进制格式-class文件。一个class文件包含jvm的指令集(或者说字节码)和一个符号表,以及一些其它辅助信息。 为了安全起见,jvm对class文件中的代码,有严格的语法和格式限制。然而任何编程语言,如果可以编译成class文件,都可以在jvm中运行。所以作为一个一般可用,与平台无关的平台,对于其它语言的实现,也可以把jvm作为他们的运行载体。 探索JVM结构体系 Hotspot体系 HotSpot JVM有一个支持强大特性和功能,可实现高性能和高扩展性的结构体系,例如HotSpot JVM的JIT编译器的动态优化功能。换句话说,它可以在java应用运行时做一些优化,让它生成对于底层系统体系更高效的本地机器指令。此外,通过对运行环境、多线程垃圾回收机制的不断成熟演进,HotSpot JVM甚至可以扩展到更多的计算机系统中。 JVM的主要组成部分,包括:类加载器,运行时数据区,和执行引擎。 关键 Hotspot组件 在JVM中,涉及到性能的关键部件如下图高亮显示。 在性能调优方面主要聚焦三个组件:堆栈是用于存储对象数据的。这块区域在程序启动之后就有GC管理了,大多数调优选项是和调整堆栈大小以及选择合适的GC有关的。JIT编译器对性能也有影响,但是对于新版本的JVM很少需要你手动调优。 基本性能 通常情况下,调优一个Java应用程序时,重点是主要是两个目标中的一个:响应速度和吞吐量。我们会请参考这些概念的教程的进展。在教程讲解的过程中,我们会涉及到下面这样概念: 响应速度 响应速度是指在接收到请求数据之后,一个应用程序或者系统响应的有多快。例如包括: 一个桌面UI对一个事件的响应有多快 一个web站点多久返回一个页面 一个数据库查询多长时间能返回 对于响应速度要求很高的应用程序,大的时间暂停是不被接受的,重点就是在短时间内响应。 吞吐量 吞吐量就是一个应用在一定的时间内做尽量多的事情,衡量吞吐量包括以下的例子: 在给定时间内完成事物的多少 一个批处理程序在1个小时内完成的任务数 数据库在一个小时内可做的查询数 对大吞吐量要求高的程序,高暂停时间是可以接受的,由于大吞吐量的程序是更关注于在一定较长时间内,所以快速的响应时间不是它要考虑的。

2014年7月4日 · 1 分钟

[翻译]G1垃圾收集器(一) 之 概论

目的: 本教程包含关于G1 垃圾收集器(简称 G1 GC)使用的基本知识,以及如何在Hotspot JVM中使用,你可以学习到G1 GC的内部是如何工作的,一些关键的命令行参数,以及日志选项。 完成时间: 1个小时左右 简介: 本培训教程涵盖了java中关于java虚拟机(JVM) G1 GC的基本知识,在教程开始总体介绍了一下提供了G1 GC的JVM,以及其性能,然后会介绍CMS GC在JVM中如何工作的,一步步引导出G1 GC在JVM中又是如何工作的。随后一个章节介绍G1 GC的所有命令行选项。最后,你会了解到使用G1 GC时用到的日志选项。 软硬件环境需求 下面是列出的对硬件和软件的需求: 一台装有window XP以后版本、Mac OS X 或者linux的机器。注意window7以及着手测试了,但是不包括所有的平台。但是在Mac OS X 或者linux平台上一切运行正常,最好机器是多核心的。 java 7 update 9 或者以后的版本 最新的Java 7 Demos and Samples Zip file 先决条件 在开始本教程之前,你需要: 如果你没有下载和安装java 7 update 9 或者以后的版本,请到这里下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载安装 Demos 和 Samples zip 从上面同样的地址 解压到一个目录中,例如: C:\javademos

2014年7月3日 · 1 分钟

荣耀立方的一个弊端(当电视附近没有网孔的情况)

不可否认,荣耀立方将路由器和电视盒子合在一起,是一种创新。但是没有想全一种场景:荣耀立方要连接电视,必须放在电视旁边,如果电视旁边没有网孔的时候,就需要扯长线连接立方。 或者你采用官方论坛里介绍的两种方案(特别是光纤或者电话线入户的用户): 方案一:Wi-Fi拨号(或者称Wi-Fi上行) 如下图,入户网络在门口或者书房,现在很多光纤入户的,光猫都是运营商送的,而且带无线,所以这个时候立方可以通过无线直接连接光猫Wi-Fi,然后立方再去拨号上网。原理和直接一根网线连接一样。 方案二:电力猫,变电线为网线 如下图,猫的LAN口连接一个电力猫的LAN口,电力猫上电,这样就将网线可识别的网络数据信号转换成电线可识别的信号,然后在客厅在通过一电力猫,把电线上的网络转换成网口/线,并连接立方,然后通过立方去拨号上网。 这是一种少见的情况,但是荣耀没有考虑到,我也是有点小小失望的,希望荣耀能继续努力,做出对用户更贴心的产品。

2014年7月2日 · 1 分钟