`
ydwcn
  • 浏览: 65166 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java内存结构与模型

阅读更多

-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

一、 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. 在操作共享变量时同步

 

 

分享到:
评论

相关推荐

    Java内存结构

    "Java内存结构" Java内存结构是Java编程语言中的一种基本概念,它决定了Java程序的运行机制。Java内存结构可以分为六个部分:寄存器、栈、堆、静态存储、常量存储和非RAM存储。其中,堆和栈是Java程序运行时最重要...

    Java内存结构.pdf

    ### Java内存结构详解 #### 一、概述 Java内存模型主要分为以下几个部分:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Program Counter Register)以及本地方法栈(Native Method Stack)。本文...

    JVM内存结构、Java内存模型、Java对象模型1

    Java内存模型(JMM)与JVM内存结构不同,它是针对多线程环境下内存访问的抽象模型。JMM确保在多线程环境下,共享变量的读写操作具有正确的顺序和可见性,通过volatile、synchronized等关键字来实现这一目标。JMM关注...

    深入理解 Java 内存模型

    1. **内存层次结构**:Java 内存模型将内存分为堆内存、栈内存、方法区(在 Java 8 及以后版本中被元空间替代)和程序计数器等几个区域,其中堆存储对象实例,栈存储局部变量,方法区存储类信息,程序计数器则用于...

    java内存模型.pdf

    标题和描述中提及的知识点主要围绕Java内存模型(JMM),JVM内存结构,包括堆栈讲解,以及本机内存管理等内容。以下是对这些知识点的详细阐述: ### Java内存模型(JMM) #### JMM简介 Java内存模型(JMM)是Java虚拟机...

    一套完整介绍java内存模型和内存结构的文档

    #### 二、Java内存结构概述 Java程序在运行时,其内存空间被划分为多个不同的区域,以满足不同的数据管理和计算需求。下面详细介绍这些内存区域: 1. **程序计数器(Program Counter Register)** - **定义**:这是...

    Java 虚拟机JVM内存模型

    JVM规范定义了JVM的内存结构,包括类加载器、执行引擎、运行时数据区域等。规范确保不同厂商的JVM实现可以兼容同一Java程序。 ##### 2.2 Sun/Oracle JVM Sun/Oracle是JVM的主要开发者之一,其JVM实现以性能优异著称...

    msJavaCoder#msJava#理解JVM内存结构与Java内存模型1

    JVM内存结构Java 代码是要运行在虚拟机上的,而虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。如果

    深入理解JAVA内存模型(高清完整版)

    Java内存模型(JVM Memory Model,简称JMM)是Java平台中的一个重要概念,它定义了在多线程环境下,如何在共享内存中读写数据,以及如何保证数据的一致性和可见性。本教程《深入理解JAVA内存模型》将带你深入探讨这...

    Java内存模型知识汇总

    Java内存模型不仅涉及CPU缓存和主存的关系,还包括JVM堆内存与线程工作内存之间的关系。Java内存模型通过一套规则来定义了JVM堆内存和线程工作内存之间的交互。在Java中,所有的对象都存放在堆内存中,而每个线程有...

    Java 内存结构备忘录1

    Java 内存结构是一个复杂的系统,包括堆内存模型、垃圾回收算法和处理内存泄露的最佳方案。Java 虚拟机(JVM)中存在 PermGen(内存永久保存区域), PermGen 中存储了常量池、字段与方法数据及代码。堆内存模型分为...

    深入java内存模型

    《深入Java内存模型》是一本面向Java开发人员的专业书籍,旨在帮助读者深入理解Java平台的内存管理和性能优化。这本书详细探讨了Java内存模型(JVM)的基础知识,以及如何利用这些知识来提升程序的效率和稳定性。...

    基于Java虚拟机内存模型的性能调优方法.zip

    Java内存模型,也称为JVM内存结构,主要包括堆内存、栈内存、方法区、程序计数器和本地方法栈五个部分。理解这些区域的工作原理对于进行性能调优至关重要。 - **堆内存**:存储所有类实例和数组,是所有线程共享...

    Java中堆内存与栈内存分配浅析

    本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。 #### 二、堆内存与栈内存概述 ##### 1. 堆内存 堆内存是Java虚拟机(JVM)用于存储...

    Java-concurrentMap-内存模型深入分析-HotCode

    本文将深入探讨`concurrentMap`在Java内存模型(JMM,Java Memory Model)中的实现原理,以及如何通过HotCode优化并发性能。 Java内存模型定义了线程之间的共享变量访问规则,确保在多线程环境下正确地同步数据。...

    深入理解Java内存模型(二)共3页.pdf.zip

    8. Java内存模型与JVM内存结构的关系:虽然两者名字相似,但JMM关注的是线程间的通信和同步,而JVM内存结构则更多地涉及堆、栈、方法区等内存区域的划分。 在实际编程中,理解并合理应用Java内存模型,可以帮助我们...

    Java虚拟机 JVM 内存结构介绍

    Java虚拟机(JVM)内存结构是理解Java应用程序性能和内存管理的关键。本文将详细介绍JVM内存的不同组件,包括它们的功能和重要性。 首先,Java虚拟机规范中的内存管理主要涉及Runtime Data Area,这是一个用于存储...

    JVM内存结构.zip

    Java内存模型定义了线程如何访问和修改共享变量,确保多线程环境下的正确性。它涉及到 volatile、synchronized、final 等关键字的语义。 理解并掌握JVM内存结构有助于我们编写高效、稳定的Java代码,避免出现性能...

Global site tag (gtag.js) - Google Analytics