`
ZavaKid
  • 浏览: 20175 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
  本博客现在会顶置一个帖子,介绍一些非常好的网站,也欢迎大家推荐更多的好的网站。     GoldenDoc 黄金档 。这是我所在的团队博客,有关技术,开源,对一些基础技术的研究是比较深入的。打好基础,才是最最重要的。下面是关于黄金档的资料:     Golden Doc写道 goldendoc,致力于对开源框架的分析和研究。对于程序员来说,我们生活在一个框架的世界里。每一个框架对于程序员来说都是一笔宝贵的财富,因为框架不仅为我们提供了我们需要的功能,更重要的,它也是优秀的程序员思想和代码的结晶。在框架里,你可以学到很多,比如设计模式、如何重构代码、还有对于程序员来说不可多 ...
以下是在学习 http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf 之后所做的学习笔记。 请大家看后多拍砖,多交流 GC学习笔记,在下文中,GC即作为动词,又可作为名词:) GC特性以及各种GC的选择 GC性能指标 分代回收 J2SE 5.0的HotSpot JVM上的GC学习 - 分代、GC类型、快速分配 J2SE 5.0的HotSpot JVM上的GC学习 - SerialGC J2SE 5.0的HotSpot ...
  之前简单的看了一下 Tokyo Tyrant(包括 Tokyo Cabint) 在 hash 存储上的一些实现,最近 Redis 又比较火热,因此,自己也尝试性的去了解了一下 Redis,并且结合 Tokyo Tyrant(以下简称 tt server),说说自己对这两种产品的看法。抛砖引 ...
Concurrent mark sweep GC 很多应用对响应时间的要求要大于吞吐量。 YGC并不暂停多少时间,但FGC对时间的暂用还是很长的。特别是在年老区使用的空间较多时。 因此, HotSpot引入了一个叫做CMS的收集器,也叫低延时收集器。 CMS的YGC 与并行GC同样的方式: stop-the-world 加上 copy。 CMS的FGC CMS的FGC在大部分是和应用程序一起并发的! CMS在FGC的时候,一开始需要做一个短暂的暂停,这个阶段称为最初标记:识别所有被引用的对象。 在并发标记时候,会和应用程序一起运行。 因为并发标记是和程序一 ...
Parallel Compacting GC parallelCompactingGC是在J2SE5.0 update6 引入的。 parallel compacting GC 与 parallel GC的不同地方,是在年老区的收集使用了一个新的算法。并且以后,parallel compacting GC 会取代 parallem GC的。 YGC的并行压缩GC 与并行GC使用的算法一样:stop-the-world 和 复制。 年老区的并行压缩GC 他将把年老区和永久区从逻辑上划分成等大的区域。 分为三个阶段: 标记阶段,使用多线程对存在引用的对象进行并行标记 ...
并行GC 现在已经有很多java应用跑在多核的机器上了。 并行的GC,也称作吞吐量GC,这种GC把多个CPU都用上了,不让CPU再空转。 YGC的并行GC YGC的情况,还是使用stop-the-world + 复制算法的GC。 只不过是不再串行,而是充分利用多个CPU,减少GC负荷,增加吞吐量。 如下图,串行YGC和并行YGC的比较: 年老区的并行GC 也是和串行GC一样,在年老区和永久区使用Mark-Sweep-Compact,利用多核增加了吞吐量和减少GC负荷。 何时使用并行GC 对跑在多核的机器上,并且对暂停时间要求不严格的应用。因为频率较低, ...
串行GC  串行GC,只使用单个CPU,并且会stop the world。 young 的串行GC 如下图:     当发生ygc的时候,Eden和From的survivor区会将被引用的对象复制到To这个survivor种。 如果有些对象在To survivor放不下,则直接升级到年老区。 当YGC完成后,内存情况如下图: old区的串行GC 年老区和永久区使用的是Mark-Sweep-Compact的算法。 mark阶段是对有引用的对象进行标识 sweep是对垃圾进行清理 compact对把活着的对象进行迁移,解决内存碎片的问题 如下图: ...
HotSpot上的分代 分成三部分:年轻代、年老代、永久代 很多的对象一开始是分配在年轻代的,这些对象在熬过了一定次数的young gc之后,就进入了年老代。同时,一些比较大的对象,一开始就可能被直接分配到年老代中(因为年轻代比较小嘛)。 年轻代 年轻代也进行划分,划分成:一个Eden和两个survivor。如下图:   大部分的对象被直接分配到年轻代的eden区(之前已经提到了是,很大的对象会被直接分配到年老代中), survivor区里面放至少熬过一个YGC的对象,在survivor里面的对象,才有机会被考虑提升到年老代中。 同一时刻,两个survivor ...
之前 Btrace 只是听说过,但还没有具体的用到。最近在排查线上问题的时候,使用了 Btrace ,发现 Btrace 真是在关键时候的利器。   Btrace 是一个安全,可以动态跟踪 java 程序的一种工具。 他的操作不会对原有 java 进程产生影响,不用关闭正在运行的 java 进程,也不会修改 java 进程中的逻辑和数据。 因此,也就成为我们线上跟踪生产代码的有力工具!   Btrace 的脚本编写也非常简单:和写 Java 代码一样的,因此对于我们,学习的曲线几乎是平坦的。   下面就分享一下 ...

分代回收

什么是分代  当使用分代回收技术,内存会被分为几个代(generation)。也就是说,按照对象存活的年龄,把对象放到不同的代中。 使用最广泛的代,应属年轻代和年老代了。 根据各种GC算法的特征,可以相应的被应用到不同的代中。 研究发现: 大部分的对象在分配后不久,就不被引用了。也就是,他们在很早就挂了。 只有很少的对象熬过来了。 年轻代的GC相当的频繁,高效率并且快。因为年轻代通常比较小,并且很多对象都是不被引用的。 如果年轻代的对象熬过来了,那么就晋级到年老代中了。如图:     通常年老代要比年轻代大,而且增长也比较慢。所以GC在年老代发生的频率非常低,不过一 ...
吞吐量       应用花在非GC上的时间百分比 GC负荷     与吞吐量相反,指应用花在GC上的时间百分比 暂停时间    应用花在GC stop-the-world 的时间 GC频率      顾名思义 Footprint    一些资源大小的测量,比如堆的大小 反应速度    从一个对象变成垃圾道这个对象被回收的时间 一个交互式的应用要求暂停时间越少越好,然而,一个非交互性的应用,当然是希望GC负荷越低越好。 一个实时系统对暂停时间和GC负荷的要求,都是越低越好。 一个嵌入式系统当然希望Footprint越小越好。
垃圾回收器的特性 该回收的对象一定要回收,不该回收的对象一定不能回收 一定要有效,并且要快!尽可能少的暂停应用的运行 需要在时间,空间,回收频率这三个要素中平衡 内存碎片的问题(一种解决内存碎片的方法, ...
背景 这几天在做开发联调的时候,出现了这样一种情况:我的应用本身开启的是24100端口,但别的应用却是调用我的80的端口。 本来我把端口重新配置一下,编译重启应用就OK的事情。但想想UED还在用我的24100端口,真是个棘手的事情。   由于时间紧急,所以就弄了一个最简单的方案:把 httpd 停掉,在配置文件中新增一个80端口的监听,重启 httpd。   事后想想,看有没有别的方法解决此问题,后来想了想,还有两种解决方案: 再新启一个httpd,监听80端口,并且在80端口做一个代理 使用 iptables 把端口从80 透明的改成 24100 由于第二种方案从来没有试 ...
Global site tag (gtag.js) - Google Analytics