JVM管理的内存
程序计数器(PC):每条线程都有独立的PC
JVM栈(Java栈):描述的是Java方法执行的内存模型,每个方法被执行的时候会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,也是线程私有的。
本地方法栈:与Native方法相关
Java堆:线程共享的内存地址空间,用于存放对象实例,也是GC管理的主要区域。
直接内存:与Native堆相关
方法区:存储已被JVM加载...
分类:
编程语言 时间:
2015-06-01 14:49:10
阅读次数:
212
一、JAVA内存模型简介
JAVA Merory Model描述了JAVA程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。
所有的变量都保存在主内存中,但是每个线程都有自己的独立工作内存,保存该线程使用到的变量的一个副本。
两条规定
1.线程对共享变量的操作只能在独立的工作内存中进行,不能在主内存中直接读写;
2.不...
分类:
编程语言 时间:
2015-05-28 21:38:07
阅读次数:
262
不要将函数定义或者变量声明放到头文件中。(变量声明除非用关键字extern,其它一律是定义)头文件中常包含的内容有:函数原型使用#define或const定义的符号常量(const是作用域为本文件的常量)结构声明类声明模板声明内联函数 注:归结一点就是,不能重定义。但是可以重声明。(类定义也是不能....
分类:
其他好文 时间:
2015-05-27 22:32:50
阅读次数:
223
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个...
分类:
编程语言 时间:
2015-05-26 00:08:29
阅读次数:
217
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFe...
分类:
编程语言 时间:
2015-05-25 23:56:52
阅读次数:
268
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个...
分类:
编程语言 时间:
2015-05-25 23:49:36
阅读次数:
191
1.排序算法以及他们的复杂度(平均复杂度) 重点:快速排序2.操作系统的内存有什么作用: 进程管理、内存模型(类比JVM内存模型) 画出来:(loadclass–>JNI到方法接口流程图)。。。Heap,stack,PC count,method,方法接口区?3.解释GC原理4.解释分代收集算法5....
分类:
其他好文 时间:
2015-05-23 14:06:49
阅读次数:
130
本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一...
分类:
其他好文 时间:
2015-05-23 11:22:27
阅读次数:
163
本文通过介绍Java的新/旧内存模型,来展示Java技术的历史变迁。旧的Java内存模型Java使用的是共享内存的并发模型,在线程之间共享变量。Java语言定义了线程模型规范,通过内存模型控制线程与变量的交互,从而实现Java线程之间的通信。在JDK5之前,Java一直使用的是旧内存模型。如图1所示...
分类:
编程语言 时间:
2015-05-22 00:11:16
阅读次数:
196