一、 java内存结构
1. Heap(堆):实例分配的地方,通过-Xms与-Xmx来设置
2. MethodArea(方法区域):类的信息及静态变量。 对应是Permanet Generation, 通过-XX:PermSize来设置
3. JavaStack(java的栈):虚拟机只会直接对Javastack执行两种操作:以帧为单位的压栈或出栈。通过-Xss来设置, 若不够会抛出StackOverflowError
4. ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的饿地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。
5. Nativemethodstack(本地方法栈):保存native方法进入区域的地址
当中Heap和MethodArea是被所有线程的共享使用的;
而Javastack,Programcounter和Nativemethodstack是以线程为粒度的,每个线程独自拥有自己的部分
二、 内存模型
由以上可以知道java内存分为main memory和线程的Working Memory,就会涉及到这两种内存数据同步以及多个线程操作时数据一致性和可见性的问题。这就不可避免要加锁了,在java中可采用如下的形式:
1. synchronized关键字或使用java.util.concurrent.locks中的锁
2. volatile关键字 Volatile表示的是线程每次操作都是在主内存中进行, 这只能保证其可见性, 而不能保证其的原子性, 要有原子性还得加锁
3. final变量(基本类型,类类型还是可以改值的)
三、 如何保证线程安全
1. 每个线程只操作自有的数据, 这个可能性要小。
2. 设计的类无数据成员, 也就没有共享变量, 要有可用是 final或volatile
3. 在操作共享变量时同步
- 大小: 38.9 KB
分享到:
相关推荐
Java内存结构: 深入理解Java内存模型一基础并发编程模型的分类Java内存模型的抽象重排序处理器重排序与内存屏障指令happens-before深入理解Java内存模型二重排序数据依赖性..
Java内存模型详解,JVM结构..
一套完整介绍java内存模型和内存结构的文档
JVM内存结构Java 代码是要运行在虚拟机上的,而虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。如果
但是初学者往往深陷Java语言的内存存储结构模型,大量复杂的设计模型使其很难对所学知识进行融会贯通。李若亮老师带你深入剖析Java编程中所内存涉及的方方面面,从JVM的内存申请,到Java语言的内存加载以及Java语言...
1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范 2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能 3、不同
JVM,虚拟机结构,java,内存结构
简略辨析JVM内存结构、Java内存模型、Java对象模型三个概念的异同 说明Java内存模型概念和核心内容 针对重排序说一说重排序的例子,重排序的好处 着重说一说可见性,说一说JVM内存的抽象、hanpens
显式内存模型的好处显式内存模型的好处像 C 和 C++ 这些语言就没有显示的内存模型 —— 但 C 语言程序继承了执行程序处理器的内存模型(尽管一个给定体系结构
下图展示了 Java 堆内存模型,以及运行在 Java 虚拟机中任意 Java 应用的 PermGen (内存永久保存区域),下面的比率展示了 JVM 各代类型
1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范 2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能 3、不同
基于数据结构与简化内存模型的Java集合教学方法研究
基于数据结构与简化内存模型的Java集合教学方法研究.pdf
主要为大家讲解JVM内存模型|内存结构|内存屏障,他们的概念,有什么关联以及各种的功能
非常清楚的描述java内存结构,对并发编程有很好的帮助。
1、Java虚拟机内存结构模型 Java虚拟机内存结构分:JVM堆、方法区、虚拟机栈、本地方法栈、程序计数器。 JVM堆:所有线程共享的运行时内存区域,是GC回收的主场所,Java堆保存Java的实例对象,从内存回收对象的存活...
jvm的内存结构图,详细的介绍了jvm运行的模型流程,包括jvm运行的五大内存分布。通过什么是jvm什么是java编程程序的=中的三个兄弟jdk.jvm和jre的区别
jvm的内存结构图的ppt模型分析.zip
此文对于java初学者,想了解清楚java内存结构的童鞋,很有参考价值