摘要:
5.9堆是分配对象的唯一选择吗 在《深入理解Java虚拟机》中关于Java堆内存有这样的一段描述: 随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也逐渐变得不那么"绝对"了。 在Java虚拟机中,对象是在Java堆中分配内存的, 阅读全文
posted @ 2021-10-19 22:06
Lz_蚂蚱
阅读(52)
评论(0)
推荐(0)
摘要:
5.8堆空间的参数设置 官网说明:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html -XX:+PrintFlagsInitial 查看所有的参数的默认初始值 -XX:+PrintFlagsFinal 查看所有的参 阅读全文
posted @ 2021-10-19 22:04
Lz_蚂蚱
阅读(63)
评论(0)
推荐(0)
摘要:
TLAB线程私有缓存区 为什么有TLAB(Thread Local Allocation Buffer)? 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据。 由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的。 为避免多个线程操作同一地址,需要使用加锁 阅读全文
posted @ 2021-10-19 22:03
Lz_蚂蚱
阅读(65)
评论(0)
推荐(0)
摘要:
5.5MinorGC、MajorGC、FullGC JVM在进行GC时,并非每次都对上面三个内存区域一起回收,大部分时候回收都是指新生代。 针对HotSpot VM的实现,它里面的GC按照回收区又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)。 部分收集:不 阅读全文
posted @ 2021-10-19 22:02
Lz_蚂蚱
阅读(101)
评论(0)
推荐(0)
摘要:
5.6堆空间分代思想 为什么需要把Java堆分代?不分代就不能正常工作吗? 不同对象的生命周期不同。70% - 99%的对象是临时对象。 新生代:有Eden、两块大小相同的Survivor(又称from/to,s0/s1)构成,to总为空。 老年代:存放新生代中经历多次GC仍然存活的对象。 5.7内 阅读全文
posted @ 2021-10-19 22:02
Lz_蚂蚱
阅读(31)
评论(0)
推荐(0)
摘要:
5.4图解对象分配过程 对象分配过程概述: 1.new的对象放在伊甸园区,此区大小有限制。 2.当伊甸园区的空间填满时,程序有需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放在伊甸园区。 3.然后将伊甸园 阅读全文
posted @ 2021-10-19 22:00
Lz_蚂蚱
阅读(170)
评论(0)
推荐(0)
摘要:
5.3年轻代与老年代 存储在JVM中的Java对象可以被划分为两类: 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速 另一类对象的生命周期却非常长,在某些极端的情况下还能够与JVM的生命周期保持一致。 Java堆区进一步细分的话,可以划分为年轻代(YoungGen)和老年代(OldGe 阅读全文
posted @ 2021-10-19 21:59
Lz_蚂蚱
阅读(197)
评论(0)
推荐(0)
摘要:
5.堆 5.1堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该 阅读全文
posted @ 2021-10-19 21:57
Lz_蚂蚱
阅读(119)
评论(0)
推荐(0)