JVM学习笔记
文章平均质量分 93
kevinjqy
这个作者很懒,什么都没留下…
展开
-
JVM学习笔记——java内存模型与线程(1)
概述多任务处理出现的重要原因是计算机的运算速度与存储及通信子系统的速度差距太大,大量的时间花费在磁盘I/O,数据库访问或者数据库访问上。除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景,对于计算量相同的,程序并发协调的越有条不紊,效率自然就高,反之线程之间频繁的阻塞甚至死锁,将会大大降低程序的并发能力。硬件的效率以及一致性由于计算机的处理器的运算速度原创 2017-03-17 20:44:13 · 695 阅读 · 0 评论 -
JVM学习笔记——java内存模型与线程(2)
Java与线程并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系。线程的实现线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、 文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 对java而言,每个已经执行start()且还未结束的java.lang.原创 2017-03-17 21:14:54 · 646 阅读 · 0 评论 -
JVM学习笔记——线程安全与锁优化
线程安全定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。java语言中的线程安全讨论线程安全有一个前提,即多个线程之间存在共享数据访问。按照线程安全的“安全程度”由强至弱来排序,可以将Java语言中各种操作共享的数据分为以下5类:不可变、 绝原创 2017-03-20 19:37:25 · 607 阅读 · 0 评论 -
JVM学习笔记——垃圾收集器与内存分配策略(1)
概述上一篇文章介绍了java运行时内存的各个区域,其中虚拟机栈,程序计数器,本地方法栈三个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出有条不紊的执行着出栈与入栈的操作,每一个栈帧分配多少内存基本是类结构确定下来就已知的。因此,这几个区域的内存回收都具有确定性,在这几个区域不必过多的考虑回收的问题,因为方法结束或者线程结束时,内存自然也跟着回收了。 而java堆与方法区不一样,一个接口原创 2017-03-11 14:21:28 · 500 阅读 · 0 评论 -
JVM学习笔记——Java内存区域与内存溢出异常
运行时数据区域其中,其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非线程共享的。JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器)原创 2017-03-08 16:06:57 · 739 阅读 · 0 评论 -
JVM学习笔记——垃圾收集器与内存分配策略(2)
垃圾收集器java虚拟机规范中并没有对垃圾收集器如何实现有任何规定,因此,不同的厂商,不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,这里只讨论基于JDK1.7之后的HotSpot虚拟机。这个虚拟机包括的收集器如下图所示: 上图展示了7种不同的垃圾收集器,如果两个垃圾收集器中存在连线,就证明这两种垃圾收集器可以搭配使用。它们所处的区域,代表了他们是在新生代还是老年代中使用。Serial收集原创 2017-03-14 18:29:09 · 327 阅读 · 0 评论