摘要:
说说逃逸分析和栈上分配 逃逸分析: 它是可以有效减少java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。它能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。 当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸。 当一个对象在方法中被定义后,它被 阅读全文
摘要:
为什么会有TLAB(Thread Local Allocation Buffer)? • 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据; • 由于对象实例的创建在JVM中十分频繁,一次在并发环境下从堆区中划分内存空间是线程不安全的; • 为避免多个线程操作同一地址,需要使用加锁等机制,进 阅读全文
摘要:
你了解对象分配规则吗 为新对象分配内存是一个非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收是否会在内存空间中产生内存碎片。 对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机 阅读全文
摘要:
Java 对象的创建过程 1.1 类加载 虚拟机遇到new指令,首先检查这个指令的参数能否在元空间的常量池中定位到一个类的符号引用,并且看这个符号引用的类是否已经被加载,解析和初始化。如果没有,那么在双亲委派模式下,查找对应的class文件。 1.2 分配内存 对象所需内存大小根据加载的类来确定,为 阅读全文
摘要:
Minor GC、Major GC、Full GC Minor GC 当年轻代空间不足时,就会触发Minor GC,这里的年轻代满指的是Eden满,Survivor满不会触发GC。(每次Minor GC 会清理年轻代的内存) 因为Java对象大多都具备朝生熄灭的特性,所以Minor GC非常频繁,一 阅读全文