Loading

摘要: Java GC java堆是垃圾收集器管理的主要区域,所以被称为GC堆,所以Java堆可以细分为新生代,老生代,新生代再分为Eden空间,from survive区和to survive区,这样更细的分是因为更好的回收内存。 大部分情况,对象都会首先在Eden区域分配,随着对象的创建,Eded剩余内 阅读全文
posted @ 2022-03-17 21:26 远乡人 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 堆:Java虚拟机所管理的内存最大的一块, java堆是所有线程共享的一块内存区域,在虚拟机启动时候创建,此内存区域唯一目的就是存放对象实例,在这里分配内存。Java堆是垃圾收集器管理的主要区域,因此也被称为GC堆。 在JDK7版本,堆内存被通常分为:新生代内存,老生代内存,永久代内存,早JDK1. 阅读全文
posted @ 2022-03-17 15:07 远乡人 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 程序计数器,Java虚拟机栈,本地方法栈是线程私有的,堆,方法区,直接内存是线程共享的。 程序计数器:为了线程切换后能恢复到正确的执行位置,是唯一一个不会出现OutOfMemoryError的内存区域,生命周期随着线程的创建而创建,随着线程的结束而死亡。 Java虚拟机栈:是Java方法执行的内存模 阅读全文
posted @ 2022-03-17 14:32 远乡人 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。 如何创建线程池? 1.通过构造方法实现 2.通过Executor框架的工具类Executors来实现。 线程池原理:我们在代码中模拟了 10 个任务,我们配置的核心 阅读全文
posted @ 2022-03-17 11:27 远乡人 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 调用start()方法方可启动线程并且使线程进入就绪状态,这是真正的多线程工作。 直接调用run()方法,会把run()当作一个main线程下的普通方法去执行,这不是多线程工作。 阅读全文
posted @ 2022-03-17 11:14 远乡人 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待。 如何确保N个线程可以访问N个资源同时又不导致死锁? 指定获取锁的顺序,并且强制线程按照顺序获取锁,因此所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。 阅读全文
posted @ 2022-03-17 10:59 远乡人 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 1.线程间的切换和调度的成本远远小于进程 2.多线程并发编程是开发高并发系统的基础,利用好多线程机制可以提高系统的并发能力。 并发编程可能遇到的问题:内存泄露,线程不安全,死锁 阅读全文
posted @ 2022-03-17 10:46 远乡人 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 程序计数器私有是为了线程切换后能恢复到正确的执行位置 虚拟机栈和本地方法栈私有是为了保证线程中的局部变量不被别的线程访问到。 阅读全文
posted @ 2022-03-17 10:29 远乡人 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 1.介绍下Java内存区域 Java的内存区域 在jdk1.8之前是线程私有的:程序计数器,虚拟机栈,本地方法栈 线程共享的:堆,方法区 直接内存 在jdk1.8开始是线程私有的:程序计数器,虚拟机栈,本地方法栈 线程共享的:堆 直接内存以及里面的元空间程序计数器:指向下一条需要执行的字节码;记录当 阅读全文
posted @ 2022-03-17 10:06 远乡人 阅读(100) 评论(0) 推荐(0) 编辑