线程安全与JVM内存结构

Posted 爱码农爱生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程安全与JVM内存结构相关的知识,希望对你有一定的参考价值。

线程安全

线程安全: 就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

2. JVM内存结构主要有三大块:堆内存、方法区和栈

Java堆是被所有线程共享,是Java虚拟机所管理的内存中最大的一块 Java堆在虚拟机启动时创建。

Java堆唯一的目的是存放对象实例,几乎所有的对象实例和数组都在这里。

分类:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor区。

新生代:包括Eden区、From Survivor区、To Survivor区,系统默认大小Eden:Survivor=8:1。

老年代:在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

java虚拟机栈(stack)

Java虚拟机栈是线程私有的,它的生命周期与线程相同。

方法区(Method Area)

线程共享内存区域,用于储存已被虚拟机加载的类信息、常量、静态变量,即编译器编译后的代码,方法区也称持久代(Permanent Generation)。

3.原子操作

原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下避免数据不一致必须的手段

以上是关于线程安全与JVM内存结构的主要内容,如果未能解决你的问题,请参考以下文章

Java的线程安全单例模式JVM内存结构等知识梳理

不一样的视角:从JVM内存模型谈线程安全

说说怎么保证线程安全

说说怎么保证线程安全

说说怎么保证线程安全

JVM保证线程安全