Tag: Java
All the articles with the tag "Java".
JAVA基础(五、JVM垃圾回收机制及算法 )
1.1 什么是垃圾回收说起垃圾收集(Garbage Collection, 下文简称GC) , 有不少人把这项技术当作Java语言的伴生产物。 事实上,垃圾收集的历史远远比Java久远, 在1960年诞生于麻省理工学院的Lisp是第一门开始使 用内存动态分配和垃圾收集技术的语言。垃圾收集需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 1.2 java垃圾回收的优缺点优点: • 不需要考虑内存管理, • 可以有效的防止内存泄漏,有效的利用可使用的内存。 • 由于有垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"缺点:java开发人员不了解自动内存管理, 内存管理就像一个黑匣子,过度依赖就会降低我们解决内存溢出/内存泄漏等问题的能力。
JAVA基础(二、JMM内存模型 )
1.1 为什么会存在“内存可见性”问题下图为x86架构下CPU缓存的布局,即在一个CPU 4核下,L1、L2、L3三级缓存与主内存的布局。 每个核上面有L1、L2缓存,L3缓存为所有核共用。因为存在CPU缓存一致性协议,例如MESI,多个CPU核心之间缓存不会出现不同步的问题,不会有 “内存可见性”问题。 缓存一致性协议对性能有很大损耗,为了解决这个问题,又进行了各种优化。例如,在计算单元和 L1之间加了Store Buffer、Load Buffer(还有其他各种Buffer),如下图:
JAVA基础(三、并发编程基础 )
JAVA基础(三、并发编程基础 )
JAVA基础(六、JVM元空间、方法区和直接内存 )
一、元空间它和永久代有什么不同的? • 存储位置不同:永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。 • 存储内容不同:在原来的永久代划分中,永久代用来存放类的元数据信息、静态变量以及常量池等。现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。 1.1 为什么要废弃永久代,引入元空间?相比于之前的永久代划分,Oracle为什么要做这样的改进呢? • 在原来的永久代划分中,永久代需要存放类的元数据、静态变量和常量等。它的大小不容易确定,因为这其中有很多影响因素比如类的总数,常量池的大小和方法数量等,-XX:MaxPermSize 指定太小很容易造成永久代内存溢出。 • 移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代 • 永久代会为GC带来不必要的复杂度,并且回收效率偏低。