要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的。今天我们将会了解JVM内存的各个部分、如何监控以及垃圾收集调优。Java(JVM)内存模型正如你从上面的图片看到的,JVM内存被分成多个独立的部分。广泛地说,JVM堆内存被分为两部分——年轻代(YoungGeneration)和老年代(O...
分类:
编程语言 时间:
2014-12-16 11:18:34
阅读次数:
308
JVM内存分配概述Jvm 内存分为:堆、非堆及直接内存三大块。堆区分为年轻代和老年代,永生代属于非堆内存。对象优先在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代class、常量等信息jvm直接加载进持久代Java对象首先进入Eden区,如果对象没有在被引用,会进入存活区(S0-S1顺...
分类:
其他好文 时间:
2014-12-12 11:25:55
阅读次数:
408
Java技术体系中的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配往大的方向上讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲(-XX:+UseTLAB,默认已开启),将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器...
分类:
编程语言 时间:
2014-12-10 14:14:49
阅读次数:
207
论文: A Fast Write Barrier for Generational Garbage Collectors
http://hoelzle.org/publications/write-barrier.pdf
老年代需要记录对新生代的对象引用,以便于新生代GC之后更改老年代相应位置的引用,不然就要扫描整个老年代了。这些标记称为Remembered Set。确保代际的引用位置...
分类:
编程语言 时间:
2014-12-09 17:52:02
阅读次数:
226
这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old Generation)的概念。你应该了解了J...
分类:
编程语言 时间:
2014-12-05 19:51:33
阅读次数:
325
JVM区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(j...
分类:
其他好文 时间:
2014-12-03 12:40:30
阅读次数:
302
最近遇见一个从前没有遇见的陷阱,就是data里的chunk拼接。由于本人身为前端工程师,对buffer的概念实在是认识不足。这次的场景是我要通过http.get去抓取远端的网页文件,很不小心的是对方的文件编码是gbk(估计是老年代Java环境下的解决方案),而我本地的代码是utf8的编码,最终我需要...
分类:
其他好文 时间:
2014-11-11 16:17:19
阅读次数:
238
Java_garbage collector 摘自:http://blog.csdn.net/java2000_wl/article/details/8030172 HotSpot JVM垃圾收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在...
分类:
编程语言 时间:
2014-10-26 23:05:21
阅读次数:
677
现在收集器都是采用分代收集算法,堆被划分为新生代和老年代。新生代主要存储新创建的对象和尚未进入老年代的对象。老年代存储经过多次新生代GC(Minor GC)任然存活的对象。 新生代:程序新创建的对象都是从新生代分配内存,新生代由Eden Space和两块相同大小的Survivor Space(...
分类:
编程语言 时间:
2014-10-16 18:26:22
阅读次数:
2499
1. Java堆中各代分布: 图1:Java堆中各代分布 Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 ...
分类:
编程语言 时间:
2014-10-16 16:31:03
阅读次数:
284