《深入理解java虚拟机》学习笔记10——并发编程(二)

Java的并发编程是依赖虚拟机内存模型的三个特性实现的: (1).原子性(Atomicity): 原子性是指不可再分的最小操作指令,即单条机器指令,原子性操作任意时刻只能有一个线程,因此是线程安全的。 Java内存模型中通过read、load、assign、use、store和write这6...

2012-09-15 17:15:18

阅读数 2834

评论数 0

《深入理解java虚拟机》学习笔记9——并发编程(一)

随着多核CPU的高速发展,为了充分利用硬件的计算资源,操作系统的并发多任务功能正变得越来越重要,但是CPU在进行计算时,还需要从内存读取输出,并将计算结果存放到内存中,然而由于CPU的运算速度比内存高几个数量级,CPU内的寄存器数量和容量有限,为了不让CPU长时间处于等待内存的空闲状态,在CPU和...

2012-09-15 15:11:30

阅读数 3889

评论数 0

《深入理解java虚拟机》学习笔记8——Tomcat类加载器体系结构

Tomcat 等主流Web服务器为了实现下面的基本功能,都实现了不止一个自定义的类加载器: (1).部署在同一个服务器上的两个web应用程序所使用的java类库可以相互隔离。 (2).部署在同一个服务器上的两个web应用程序所使用的java类库可以相互共享。 (3).许多Web服务器本身使用...

2012-09-02 14:56:38

阅读数 4533

评论数 0

《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期

C/C++等纯编译语言从源码到最终执行一般要经历:编译、连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载、连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但...

2012-08-26 19:01:24

阅读数 3216

评论数 0

《深入理解java虚拟机》学习笔记6——类加载机制

Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。 在加载阶段,java虚拟机需要完成以下3件事: a.通过一个类的全限定名来获取定义此类的二进制字节流。 b.将定义类的二进制字节流...

2012-08-26 17:20:30

阅读数 7810

评论数 4

《深入理解java虚拟机》学习笔记5——Java Class类文件结构

Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了...

2012-08-25 17:31:58

阅读数 6222

评论数 1

《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器

Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下: 图中如果两个垃圾收集器直接有连线...

2012-08-19 18:21:49

阅读数 15135

评论数 1

《深入理解java虚拟机》学习笔记3——垃圾回收算法

Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分...

2012-08-19 14:25:49

阅读数 5210

评论数 0

《深入理解java虚拟机》学习笔记2——Java内存溢出实例

通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。 想要方便快速地...

2012-08-12 17:12:26

阅读数 8701

评论数 5

《深入理解java虚拟机》学习笔记1——Java内存结构

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区。 Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。 (1).程序计数器: 是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行...

2012-08-12 15:43:22

阅读数 7726

评论数 1

提示
确定要删除当前文章?
取消 删除
关闭
关闭