zoukankan      html  css  js  c++  java
  • JVM学习--内存分配策略(持续更新)

    一、前言

    最近学习《深入java虚拟机》,目前看到内存分配策略这块。本文将进行一些实践。

    二、内存分配策略

    1.大对象直接进入老年代

    书中提到了:

    下面进行测试,代码如下:

    public class testBigSizeObject {
        private static final int _1MB=1024*1024;
    
        public static void main(String[] args) {
            byte[] allocation;
            allocation=new byte[4*_1MB]; //直接分配在老年代中
            System.out.println(allocation[0]);
        }
    
    }

    1.1 新生代收集器为Parallel Scavange的情形

    以下虚拟机参数,没有显式设置垃圾收集器,默认新生代为Parallel Scavange(这一点可以从标准输出中的-XX:+UseParallelGC看出来)

     -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:PretenureSizeThreshold=3145728 -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+PrintCommandLineFlags

    标准输出:

    
    

    -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=10485760 -XX:NewSize=10485760 -XX:PretenureSizeThreshold=3145728 -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

    Heap
     PSYoungGen      total 9216K, used 5899K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
      eden space 8192K, 72% used [0x00000000ff600000,0x00000000ffbc2e10,0x00000000ffe00000)
      from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
      to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
     ParOldGen       total 10240K, used 0K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
      object space 10240K, 0% used [0x00000000fec00000,0x00000000fec00000,0x00000000ff600000)
     Metaspace       used 2886K, capacity 4486K, committed 4864K, reserved 1056768K
      class space    used 309K, capacity 386K, committed 512K, reserved 1048576K

    这里值得注意的是,大对象(代码中为4M的一个数组)大于-XX: PretenureSizeThreshold 设置的3M,应该直接进入老年代才对。

    可是,这里并没有进入老年代。

    1.2 显式设置新生代垃圾收集器为Serial收集器

    E:javabaseoutproductionjavabase>java  -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:PretenureSizeThreshold=3145728 -XX:+PrintGCDetails 
    -XX:SurvivorRatio=8 -XX:+UseSerialGC testBigSizeObject

    输出:

    1.3 总结

    看来,书里说的策略,那也是在特定的垃圾收集器才生效的。不是在所有垃圾收集器中都有该现象。

    所谓“纸上读来终觉浅,绝知此事要躬行”。

  • 相关阅读:
    16种动画效果
    ios GCD 详解1
    [LeetCode] 3 Sum, Solution
    [LeetCode] Combinations, Solution
    [LeetCode] Binary Tree Inorder Traversal Solution
    [LeetCode] 3Sum Closest, Solution
    [LeetCode] Combination Sum, Solution
    [LeetCode] Binary Tree Maximum Path Sum Solution
    [LeetCode] Add Two Numbers, Solution
    [LeetCode] Climbing Stairs, Solution
  • 原文地址:https://www.cnblogs.com/grey-wolf/p/10226559.html
Copyright © 2011-2022 走看看