不多说,直接上干货!

 其中
        1)程序计数器:用于指示当前线程所执行的字节码执行到了第几行,可以理解为当前线程的行号指示器。每个计数器志勇赖记录一个线程的行号,所以它是
线程私有的。
        2)虚拟机栈:一个线程的每个方法在执行的同时,会创建一个栈帧,栈帧中存储的有:局部变量、操作栈、动态链接、方法出口等。当方法被调用时,栈帧
在JVM栈中入栈,方法执行完成时栈帧出栈。局部变量表中存储方法的相关局部变量,包括各种基本数据类型,对象引用,返回地址等。每个线程对应着一个虚拟机栈
,因此虚拟机栈也是线程私有的。
        3)本地方法栈:本地方法栈的作用,运行机制,异常类型等方面与虚拟机栈相同,唯一不同时虚拟机栈用来执行java方法的,本地方法栈用来执行native方
法的。在许多虚拟机中会将本地方法栈和虚拟机栈放在一起使用。
        4)堆区:堆区是java GC机制最重要的区域。堆区是由线程共享的。在虚拟机启动时创建。堆区的存在是为了存储对象实例,原则上所有对象实例都在堆区上分配内存。

5)方法区:方法区是线程共享的,用于存储已经被虚拟机家自爱的类信息、final常量、静态变量、编译器及时编译的代码等。一般不在方法取进行垃圾收集。

 寄存器:是给CPU的。

 本地方法区:我们暂时设计不到,以后有机会了我们学习,主要运行的时本地系统平台中的内容。它是分版本的,在不同操作系统中不一样的。

  如:

  两个变量的存储位置不同:

    成员变量:存储在堆内存中的对象中,所以也叫对象的特有数据。

    静态变量:存储在方法区(共享数据区)的静态区中,所以也叫类的共享数据。

      对象是在堆里,静态变量和静态方法是在方法区,是方法调用 。
 
      注意:普通方法是在栈里。
 
 
 
 
堆和方法区,是共享的。为什么?
 原因: 方法区是存放类的信息,用static修饰,所以,共享。
            堆中保存的是对象或者数组,多个线程可以同时访问这个对象或者数组。
 
栈、本地方法区和寄存器都是各自独立的。
原因:
 
 
 
 
 
 
 
 java里的方法区、本地方法区什么区别?
   本地方法区是别的语言,比如c++,用不到。
   方法区是 jvm加载的时候存字节码用的。
 
 
 
 

我们在这里主要学习一下栈内存和堆内存,其他的几种以后再学习吧.

栈内存(stack):

  存储的都是局部变量,方法中定义的变量都是局部变量。

  栈内存处理数据的特点:变量所属作用域一旦结束,该变量就自动释放。

堆内存(heap):

  存储的是数组和对象(其实数组就是对象),凡是new建立的,都在堆中,这也就是说我们数组就存放在堆内存中。

  再说说堆内存处理数据的特点:

  1、每一个实体都有一个首地址值;

  2、堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.整数是0,小数0.0或者0.0f,boolean是false,char是'\u0000'

  3、垃圾回收机制//自动回收垃圾;

    栈和堆中,肯定要有地址,而且两边都要有地址。不然,不会怎么指向,是吧。
    但是,要注意:堆里有一块空间,空间的地址拷贝一份保存到栈里面一个变量里,栈引用了堆中的内存地址赋值是把内存地址付给了栈 。

 操作这个变量就能操作堆的那一块空间
 
 
 
 
 

 
 
 
 
 

   入栈和弹栈有什么区别?

   栈帧的入栈和弹栈就是方法调用,执行到方法1的时候,方法1开始入栈,执行完他就出栈(弹栈),然后执行到方法2的时候,方法2开始入栈,执行完了出栈。
   按照它的说法,你方法进来之后肯定要寄存起来,另一个寄存器控制指针,两个合起来就实现了入栈出栈 。
   jvm加载完成之后执行main方法这个栈帧,刚开始只有mian方法,所以main方法此时是栈顶。当方法1进来后,他压在了mian方法上。此时方法1是栈顶,main是栈底 。
 
 
 
 
 
 
 

程序计数器

  存放下一条要运行的指令;每个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。程序计数器是一块线程私有的内存空间。

JAVA虚拟机栈:

  线程私有的内存空间,它保存方法的局部变量,部分返回结果,并参与方法的调用和返回。虚拟机栈在运行的时候使用一种叫做栈帧的数据结构保存上下文数据。在栈帧中,存放了方法的局部变量表、操作数栈、动态连接方法和返回地址等信息。每个方法的调用都伴随着栈帧的入栈操作,每个方法的返回都伴随着栈帧的出栈操作。

本地方法栈:

  管理本地方法的调用。和虚拟机一样,它也会抛出StackOverFlowErrow和OutOfMemoryError。

java堆:

  几乎所有的对象和数组都是在堆中分配空间的,堆是线程共享的。堆分为新生代和老年代两部分,新生代用于存放刚刚产生的对象和年轻的对象,新生代又可以细分为eden,s0和s1区。eden表示对象的出生地,大部分刚刚出生的对象会存放在这里,s0和s1区空间,称为幸存者,其中存放的对象至少经历了一次垃圾回收,并得以幸存。如果在幸存区的对象到了指定年龄还没有被回收,则有机会进入老年代。

方法区:

  被JVM所有线程共享。方法区也称为永久区,主要存放常量和类的定义信息。方法区中最为重要的是类的类型信息,常量池,域信息,方法信息。类的类型信息包括类的完整名称,父类的完整名称,类型修饰符等;常量池包括这个类方法引用的常量信息;域信息包括域名称、域类型和域修饰符;方法信息包括方法名,返回类型、方法参数、方法修饰符。

  对永久代的回收,主要从两个方面分析:一是GC对永久区常量池的回收;二是永久区对类元数据的回收。

  一是GC对永久区常量池的回收:常量池中的常量没有被任何地方应用,就可以被回收。

  二是永久区对类元数据的回收:若系统中动态的生成大量类,可能会导致方法区溢出。JVM要确认一个类信息是否被回收,基本条件有:所有该类的实例被回收,且装载该类的ClassLoader被回收。

 

牛客网Java刷题知识点之内存的划分(寄存器、本地方法区、方法区、栈内存和堆内存)的更多相关文章

  1. 牛客网Java刷题知识点之为什么HashMap和HashSet区别

    不多说,直接上干货! HashMap  和  HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...

  2. 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  3. 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  4. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  5. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  6. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  7. 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  8. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  9. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  10. 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现

    不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...

随机推荐

  1. 按失真类型分类整理IQA数据集:TID2013

    前面已经整理了TID2008,这次整理TID2013的工作相对较简单,只需要改代码的一部分就可以了,首先我大概介绍一些TID2013. TID2013是TID2008的加强版,链接如下:http:// ...

  2. boost.asio系列(一)——deadline_timer

    一.构造函数 一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维护多个定时器.在构造deadline_timer时指定时间: basic_deadline_t ...

  3. Java50道经典习题-程序32 左移右移

    题目:取一个整数a从右端开始的4-7位.分析:比如取123456789从右端开始的4-7位即:3456(1)先使a右移4位.(2)设置一个低4位全为1,其余全为0的数.可用~(~0<<4) ...

  4. HTML完全使用详解 PDF扫描版​

    <HTML完全使用详解>根据网页制作的实际特点和目前市场需要,全面系统地介绍了最新的HTML4.01.丰富的实例贯穿全书,能帮助您全面掌握HTML,而且本书所有实例均可直接修改使用,可以提 ...

  5. sql语句增加字段 索引

    alter table order_info add area varchar(50) create index group_compar on ry_order (group_compar);   ...

  6. 背包DP【洛谷P2113】 看球泡妹子

    P2113 看球泡妹子 题目背景 2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情. 题目描述 本届世界杯共有N支球队,M场比赛.男球迷小明喜欢看比赛 ...

  7. C++基础学习10:继承

    继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程.如果类B继承于类A,那么B就 ...

  8. java 的开发工具IDEA使用 中Debug 调试工具使用

    IDEA JetBrains(这个公司的名称翻译过来就是“大脑喷射?”) 公司的宣传语是这么说的:Develop with pleasure!(带着快乐开发!)   话不多说 开始debug   1, ...

  9. PhpStrom 和 wamp 配置 xdebug

    本地服务器: 1.php.ini  添加内容: ;设置xdebug的端口为9000 xdebug.remote_handler = dbgp xdebug.remote_host= localhost ...

  10. 数据结构4.3_字符串模式匹配——KMP算法详解

    next数组表示字符串前后缀匹配的最大长度.是KMP算法的精髓所在.可以起到决定模式字符串右移多少长度以达到跳跃式匹配的高效模式. 以下是对next数组的解释: 如何求next数组: 相关链接:按顺序 ...