DAY2-java内存模型
来源:互联网 发布:阳江市阳东区网络问政 编辑:程序博客网 时间:2024/06/05 03:54
java中关于内存模型的几个概念
一个运行中的Java程序,每当启动一个新线程时,都会为这个新线程创建一个自己的PC(程序计数器)寄存器。
Java栈上的所有数据是私有的,每当一个java线程运行的时候, java虚拟机会为该线程分配一个java栈。
虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈或出栈。当线程调用java方法时,虚拟机压入一个新的栈帧到该线程的java栈中。当方法返回时,这个栈帧被从java栈中弹出并抛弃。一个帧用于存储参数、局部变量、操作数、中间运算结果等。
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
栈有一个特性,存在栈中的数据可以共享。例如 x=1,y=1; 定义时虚拟机会在栈中寻找1 如果存在就直接指向,不存在就会创建,xy变量在栈中分配内存时执行同意的操作,所以他们指向同一个1,如果改变y的值为2不会影响到x的值,这个不同于对象间的共享。
栈和堆的关系:堆主要是用来存放java对象的,栈主要是用来存放对象引用的,对象应用的值为堆中对应内存的首地址,栈中的变量指向堆内存中的变量(可以视为java中的指针)
寄存器:
我们在程序中无法控制一个运行中的Java程序,每当启动一个新线程时,都会为这个新线程创建一个自己的PC(程序计数器)寄存器。
程序计数器的作用可以看做是当前线程所执行的字节码的行号指示器。
栈:
存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中Java栈上的所有数据是私有的,每当一个java线程运行的时候, java虚拟机会为该线程分配一个java栈。
虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈或出栈。当线程调用java方法时,虚拟机压入一个新的栈帧到该线程的java栈中。当方法返回时,这个栈帧被从java栈中弹出并抛弃。一个帧用于存储参数、局部变量、操作数、中间运算结果等。
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
栈有一个特性,存在栈中的数据可以共享。例如 x=1,y=1; 定义时虚拟机会在栈中寻找1 如果存在就直接指向,不存在就会创建,xy变量在栈中分配内存时执行同意的操作,所以他们指向同一个1,如果改变y的值为2不会影响到x的值,这个不同于对象间的共享。
堆:
存储Java程序创建的类实例。所有线程共享,因此设计程序时也要考虑到多线程访问对象(堆数据)的同步问题。在堆中分配的内存,由Java虚拟机的自动的垃圾回收机制来管理堆的内存。栈和堆的关系:堆主要是用来存放java对象的,栈主要是用来存放对象引用的,对象应用的值为堆中对应内存的首地址,栈中的变量指向堆内存中的变量(可以视为java中的指针)
静态域:
存放在对象中用static定义的静态成员方法区:
在类装载器加载class文件到内存的过程中,虚拟机会提取其中的类型信息,并将这些信息存储到方法区。方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。由于所有线程都共享方法区,因此它们对方法区数据的访问必须被设计为是线程安全的。 0 0
- DAY2-java内存模型
- day2 内存模型 二级指针
- JAVA-DAY2
- Java Day2
- java内存模型 内存屏障
- Java内存模型
- Java内存模型
- java内存模型详解
- 12.Java内存模型
- java内存模型详解
- Java内存模型
- Java内存模型详解
- java 内存模型
- Java 内存模型
- Java内存模型
- java内存模型详解
- java内存模型详解
- java内存模型详解
- 如何防止SQL注入
- JavaScript-表单处理(3)
- git 的一些操作
- [LeetCode]Convert Sorted Array to Binary Search Tree
- Thinkpad E431 加固态硬盘
- DAY2-java内存模型
- QGraphicsView的事件传递
- OD简易修改仙4
- hdu 2527
- Http和Socket区别
- Groovy入门教程
- itoa()函数,10进制转换到(2~36)进制
- hdu 1423最长公共递增子序列
- 【线段树】Minimum Inversion Number(逆序数的求解)