JVM垃圾回收机制入门

by admin on 2018年12月28日

Java程序员进阶三条必经之路:数据库、虚拟机、异步通信。

日与夜的更替,喧闹的寂静,没有暮归的鸟,只是寒冷。

前言

数据库是豪门会常见重视的一个天地,异步通信一般用不到,虚拟机在大部时候不会出问题,常被人忽视,所以自己打算先读书虚拟机,从零单排Java高性能问题。

相距上次梦幻你,已经有一个礼拜之久了,每晚入睡时假如一闭上眼,全世界便安静下来,在浑浑噩噩之中,徘徊在自己耳边的是您的响声。

堆内存存储结构

Paste_Image.png

Java6是以年代来设计内存的,而Java7的G1收集器则相反,这里以Java6为准。
SurSamsungr1和SurOPPOr2是同一大的,必有一个始终为空,容量小于艾登。

明晚,我到底又见到你,于凌晨某些,在恐怖症的海洋里,捕捉到你依稀的笑,我盼望着与你际遇,就像盼望着一场美梦,永远不会醒来。

污染源回收机制

常青代选用复制算法,当回收时,将艾登(Eden)和SurHTCr中还存世的靶子一回性地复制到另外一块Sur一加r上,然后清理掉艾登(Eden)和刚刚用过的SurOne plusr空间。每举行一次Minor
GC(年轻代回收),对象的年华就大增1岁(开始为0),当年龄扩大到自然水平(默认15岁),就会被移到老年代。老年代的回收算法因篇幅有限在此略过。

从《浓密精晓Java虚拟机》第二版93页上抄一个例证来做个示范:

package com.jiuyan.mountain.jvm;

public class Test {

  private static final int MB = 1024 * 1024;

  public static void main(String[] args) {
    byte[] bytes1, bytes2, bytes3, bytes4;
    bytes1 = new byte[2 * MB];
    bytes2 = new byte[2 * MB];
    bytes3 = new byte[2 * MB];
    bytes4 = new byte[4 * MB];
  }
}

命令行执行:

java -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 com/jiuyan/mountain/jvm/Test

参数解释:

  1. Xms20M:初始堆20M
  2. Xmx20M:最大堆20M
  3. Xmn10M:年轻代10M
  4. -XX:+PrintGCDetails:打印GC详细消息
  5. -XX:Sur一加rRatio=8:艾登和一个SurSamsungr的上空比例是8:1。

输出:

Heap
 PSYoungGen      total 9216K, used 6799K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 83% used [0x00000000ff600000,0x00000000ffca3f28,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
  to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
 ParOldGen       total 10240K, used 4096K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 40% used [0x00000000fec00000,0x00000000ff000010,0x00000000ff600000)
 PSPermGen       total 21504K, used 2751K [0x00000000f4600000, 0x00000000f5b00000, 0x00000000fec00000)
  object space 21504K, 12% used [0x00000000f4600000,0x00000000f48afc08,0x00000000f5b00000)

JVM没有进展垃圾回收,byte1、byte2、byte3、byte4总共10M内存,而青春代只有9M内存,不应该啊。结果艾登有6M内存(bytes1,bytes2,bytes3),老年代有4M内存(bytes4),表明bytes4向来被分配到了老年代,因为在Sur华为r空间中当相同年龄有所目的大小的总额大于Sur中兴r空间的一半,年龄超过或等于该年龄的对象就足以平素进去老年代。

那么自己就调用System.gc()来主动触发一遍GC。
输出:

[GC-- [PSYoungGen: 6635K->6635K(9216K)] 10731K->14827K(19456K), 0.0035280 secs] [Times: user=0.00 sys=0.01, real=0.00 secs] 
[Full GC [PSYoungGen: 6635K->2275K(9216K)] [ParOldGen: 8192K->8192K(10240K)] 14827K->10467K(19456K) [PSPermGen: 2743K->2742K(21504K)], 0.0079080 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
Heap
 PSYoungGen      total 9216K, used 2441K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 29% used [0x00000000ff600000,0x00000000ff8624d8,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
  to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
 ParOldGen       total 10240K, used 8192K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 80% used [0x00000000fec00000,0x00000000ff400030,0x00000000ff600000)
 PSPermGen       total 21504K, used 2750K [0x00000000f4600000, 0x00000000f5b00000, 0x00000000fec00000)
  object space 21504K, 12% used [0x00000000f4600000,0x00000000f48af8d0,0x00000000f5b00000)

必发365乐趣网投手机版,日志分析:

  1. GC和Full
    GC表明了这一次垃圾收集的间歇类型,而不是用来区分年轻代如故老年代的。假使有“Full”,表明这次GC发生了STW(Stop-The-World)。
  2. PSYoungGen是行使Parallel
    Scavenge收集器的年青代,ParOldGen是拔取Parallel
    Old收集器的老年代,Tenured是采纳Serial Old收集器的老年代。
  3. [PSYoungGen:
    6635K->6635K(9216K)]表示GC二〇一七年轻代占有内存6M,GC后占用内存6M,内存区域总容量9M。10731K->14827K(19456K)表示GC前堆占用内存10M,GC后占用内存14M,堆总容量20M。
  4. GC过程是把青春代中的4M内存复制到了老年代,所以才会并发10731K->14827K(19456K),Full
    GC过程是把青春代中的4M内存回收掉,所以才相会世PSYoungGen:
    6635K->2275K(9216K)。

目前时时忆起我们刚在联合的时候,在我们会师以前,就象是已经对相互很了解。

是我先喜欢你的,大概是在你身上看到了不雷同的友好。

兴许对你不太公平,我曾不止五次的像个神经病般,在吸引你和废弃你之间挣扎,喜欢一个人想要拿到回复,如何都不够。尽管是现在已经明朗了你的目的在于,可自我有时候如故会以为你从未那么在乎自我,我还想要更多的爱慕,于是我像个小孩子般的胡闹,我好自私,自私到不肯控制自己的情绪,为此你早晚很烦恼吗?

五月首旬,我们约定了会晤。终结互相的煎熬,十八日午后,我漫不经心的站在火车站门口,这是第一次,我是这样的烦乱。生活教会了自我兢兢业业,而真心却使自身大胆。仿佛是天意的携带,我要去见你,我心目迫切的想要见到你,即使是炎夏,我也早早的到了站前等着您,不是怕来不及,是此时,我遵循自己的心头,非如此不可。

自我起来胡思乱想,我在想你是否是个歹徒,见到自己又会不会差强人意?我连忙的等待着。

火车上载满了人,一声响亮。人群倾巢而出,我深远的呼了一口气,尽量让投机淡定下来。我是何等紧张啊,我几乎从未应付过这种局面,我一旦把你吓跑了可怎么好?

看样子您的这刹那,心里仍然是浮动的。你拖着个细微的行李箱,慢悠悠的走了出去。我朝着你招手。你冷淡的笑了笑,后来,你很当然的拉起了我,往怀里靠了靠。这时候,我的内心仿佛有樱花开放。忽然精晓,有一对爱情故事是何许起初的。

还记得我们去周口看海回来的老大上午吧?我们打车从金昌赶回灯塔的旅途,我躺在您的怀里,满脸倦意。你爱护的抚摸着自身的额头。高架桥的灯光在眼里,你的心像路那么明亮。

隔天大家分别,我送你到飞机场,一路上我不敢表现出丝毫的不舍。我怕自己一哭,我们俩个便会惊慌。你通晓呢?在苏家的屯坐出租车的时候,我差点没有忍住。于是自己全方位车程都望着窗外,不敢看您。

在分别后的梦幻里,我反复回到大家相遇时的可怜黄昏,大家在风中境遇,中间隔着两手宽的距离,风从自身的发间吹过。也不知是哪个地方来的胆略:“要抱一抱吗?”

和你在一道久了,我仿佛继承了天蝎座的分崩离析性子,在你这里自己分解成六个协调,一个是珍贵您,一个悲伤着体贴您的。

喜欢你时,我没有一天不愿意见到您。将您紧紧搂在怀中,任何人也不可能将我们分手。

可你令自己难过时,我又想冷冷清清的维持现状也好,我不爱您,一点也不,相反,我看不惯你,你是一个郁闷,不懂风趣的木头,你不喜于本人拉家常,你明知你的话能带给本人中度的喜悦。然则你总是魂不守舍,唯有对游戏的执拗。

本人曾不止四回的强迫自己放任你,删掉你所有的联系情势,换掉属于你本身的头像。可笑的想着独自面对从未有过您的生存。然则我尝试了,毫无预兆的,我失利了,这是尚未有过的不快。

于是乎在您找到我的时候,我的心头已然是乐呵呵的,仿佛有小鹿撞过来。你了解的,我已经孤独太久了。对你而言,我总有万般不舍,一边想要放手,一边又死死引发,这真是一件非凡痛苦的事。

起首自己总以为你是一个特此外人,会弹吉他,唱歌又惬意。富有意味,性感又隐秘。比任何人都要懂我。你不上心的撩我,都让自家对您满载幻想,我说过,你于自身而言是一个妙人。

现在,我一每日了解你的平时,却愈加浓密的爱您,我不会让你觉得自己有多卓越。但当您走进自己心坎时,你肯定精通自己是何许的好。

明天与小光聊天,讲起过去心绪上的各种。原来不知从如何时候开首,我竟早已没有披露“万花丛中过,片叶不沾身”的底气,就象是是认可了一个人,从此万花皆是过客,必须认同,我在哪个地方都得以生长,唯有你出现了。我才肯绽放。

我迄今感谢您,当大家相遇,你怎么样都尚未说,只是给我个机遇,靠近。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图