随笔分类 -  JVM

摘要:一、很多初学者分不清JMM和JVM的内存模型,本篇只是简要的谈一谈什么是JMM,并不深入探讨。 示意图A: 在多线程操纵共享资源时,并不是对资源本身进行的操作,而是将共享资源的副本复制了一份到自己的私有空间中,等使用完了再写回去覆盖原资源,我可能在瞎说,你先别信,举个例子来验证一下: class N 阅读全文
posted @ 2019-10-15 16:00 菜菜菜鸡 阅读(402) 评论(0) 推荐(0)
摘要:引言: 前面的文章提到,在8版本以后,Java内存区域:Heap包括了PSYoungGen、ParOldGen,以及堆外内存MetaSpace。JVM 在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是新生代。由于新生代和老年代的内存空间大小不同以及对象存活率不同,所以针对不 阅读全文
posted @ 2019-10-15 11:54 菜菜菜鸡 阅读(3693) 评论(0) 推荐(0)
摘要:一、再议永久代和方法区 上一篇提到:在8版本以前,JVM采用堆空间的一部分实现方法区,这部分堆空间被称为“永久代”,由于类的结构信息和运行时常量池是放在方法区的,使用永久代实现方法区容易导致堆内存溢出。在8版本推出以后,Java采用了堆外内存即本机物理内存实现方法区,我们把这部分空间称为“元空间”。 阅读全文
posted @ 2019-10-14 15:21 菜菜菜鸡 阅读(460) 评论(0) 推荐(0)
摘要:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来——《围Java》·周志明 Java程序员将c++中繁琐的delete交给了虚拟机,虽然我们一直创建对象,但从未手动删除过对象,这一切正悄然发生着。我们把内存控制的权利交给了JVM,直到那一天 阅读全文
posted @ 2019-10-13 21:28 菜菜菜鸡 阅读(212) 评论(0) 推荐(0)
摘要:一、示意图 注:Car car1 = new Car; 其中car1作为引用类型变量,保存在Java栈中,而对象本身保存在堆中。类加载器只负责将Car.class文件加载到内存中,此后JVM将根据这个数据文件封装对应的数据结构(即类对象),虽然类对象也是对象,但是HotSpot虚拟机将其放在了方法区 阅读全文
posted @ 2019-10-12 18:14 菜菜菜鸡 阅读(728) 评论(0) 推荐(0)
摘要:一、设计堆内存溢出异常:OutOfMemoryError: 1 public class Main { 2 public static void main(String[] args) { 3 List<Demo> list = new ArrayList<>(); 4 while(true) { 阅读全文
posted @ 2019-10-04 21:19 菜菜菜鸡 阅读(168) 评论(0) 推荐(0)