Posts
All the articles I've posted.
JAVA基础(六、JVM元空间、方法区和直接内存 )
一、元空间它和永久代有什么不同的? • 存储位置不同:永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。 • 存储内容不同:在原来的永久代划分中,永久代用来存放类的元数据信息、静态变量以及常量池等。现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。 1.1 为什么要废弃永久代,引入元空间?相比于之前的永久代划分,Oracle为什么要做这样的改进呢? • 在原来的永久代划分中,永久代需要存放类的元数据、静态变量和常量等。它的大小不容易确定,因为这其中有很多影响因素比如类的总数,常量池的大小和方法数量等,-XX:MaxPermSize 指定太小很容易造成永久代内存溢出。 • 移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代 • 永久代会为GC带来不必要的复杂度,并且回收效率偏低。
JAVA基础(四、JVM类加载机制 )
1.1 类加载子系统介绍 1. 类加载子系统负责从文件系统或是网络中加载.class文件,class文件在文件开头有特定的文件标识。 1. 把加载后的class类信息存放于方法区,除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射); 1. ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定; 1. 如果调用构造器实例化对象,则该对象存放在堆区;
gRPC实战(七、负载均衡(二))
grpc如何负载均衡
JAVA基础(七、JVM运行内存-堆 )
1.1 简介对于Java应用程序来说, Java堆(Java Heap) 是虚拟机所管理的内存中最大的一块。 Java堆是被所 有线程共享的一块内存区域, 在虚拟机启动时创建。 此内存区域的唯一目的就是存放对象实例, Java 世界里“几乎”所有的对象实例都在这里分配内存。“几乎”是指从实现角度来看, 随着Java语 言的发展, 现在已经能看到些许迹象表明日后可能出现值类型的支持, 即使只考虑现在, 由于即时编译技术的进步, 尤其是逃逸分析技术的日渐强大, 栈上分配、 标量替换优化手段已经导致一些微妙的变化悄然发生, 所以说Java对象实例都分配在堆上也渐渐变得不是那么绝对了。Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、 From Survivor 区和 To Survivor 区)和老年 代。 1.2 特点 1. 是Java虚拟机所管理的内存中最大的一块。 1. 堆是jvm所有线程共享的。 1. 堆中也包含私有的线程缓冲区 Thread Local Allocation Buffer (TLAB) 1. 在虚拟机启动的时候创建。 1. 唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在这里分配内存。 1. Java堆是垃圾收集器管理的主要区域。 1. 因此很多时候java堆也被称为“GC堆”(Garbage Collected Heap)。从内存回收的角度来看,由于现在收集器,基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代;新生代又可以分为:Eden 空间、From Survivor空间、To Survivor空间。 1. java堆是计算机物理存储上不连续的、逻辑上是连续的,也是大小可调节的(通过-Xms和-Xmx控制)。 1. 方法结束后,堆中对象不会马上移出仅仅在垃圾回收的时候时候才移除。 1. 如果在堆中没有内存完成实例的分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。 二、 设置堆空间大小Xmx20m -Xms5m -XX:+PrintGCDetails