1.内存结构

左边两个线程共享,右边三个线程私有。

方法区:.class文件的类信息、常量、static变量、即时编译器编译后的代码(动态代理)。HotSpot将方法区称为永久代

堆:分为新生代和老年代,或分为Eden、FromSurvior、ToSurvvivor。存放了类和数组对象。当堆无法扩展且堆内没有空间分配给实例时,抛出OutOfMemoryError。

栈:由一个个栈帧组成。每次方法调用都会产生一个栈帧,调用结束后释放这个栈帧。栈帧包含了局部变量表、操作数栈、动态链接、方法出口。

  局部变量表存放的是在方法中声明的8种基本数据类型、对象的引用(指向堆中的引用)、返回值的引用(也指向堆中的引用)。其中long和double占2个单位的空格键

  操作数栈是栈帧内部的一个栈结构,Deolin认为它的作用是基于字节码指令进行计算,运算数被压进栈底,结果值从栈顶弹出。

  动态链接,存放由.class文件中的符号引用转化而来的直接引用,这两种引用都是用来指向方法中 调用的其他方法,或是其他的域。

本地方法栈:与虚拟机栈类似,它是为Native方法服务的。

程序计数器:很小的空间,显示当前线程执行到的字节码行号。

2.类加载

-> 把.class文件以二进制的形式读到方法区

-> 在堆上创建一个java.lang.Class对象,用于封装上一步中读入的信息,让它们成为方法区内的数据结构

-> 类加载的最终产物是堆中的java.lang.Class对象

3.类的生命周期

类加载

连接

  验证:检查文件格式,检查语法,比如方法内声明的final变量,不能再赋值

  准备:为静态域分配内存(堆),并设置为默认初始值(无论代码中是否赋了初值,这一步都会赋诸如null, 0, 0L之类的值)

  解析:把符号引用转换为直接引用

出现以下情况时,类进行初始化

创建该类的实例时(new、反射、克隆、反序列)

调用该类的静态方法,访问该类的静态域

调用java.lang.Class<该类>的方法时

main(Stirng[])方法

初始化该类的子类时

初始化

  有父类的话,先初始化父类。

  执行静态代码块,并为静态域分配代码层面定义的初值(这两者的顺序取决与代码中出现的先后顺序)

使用(类实例化时,紧接着初始化之后)

  有父类的话,先对父类进行1.2.3.步

  1.为域分配空间,初始化

  2.执行构造代码块

  3.构造方法

  这一步结束后堆中存在了实例化后的对象,当前栈帧的局部变量变量表中存在了指向这个对象(堆中)的引用

当满足以下所有条件时,类会被卸载

该类的所有对象都被垃圾回收(GC)

加载该类的类加载器被GC

没有引用指向java.lang.Class<该类>的实例

卸载

  类在方法区的数据结构被移除

4.各种数据字段在JVM中的内存位置

对象、数组      堆

基本数据类型的域   堆(因为非静态域无法独立于对象存在,所以跟对象一起在堆中,而且是线程不安全的)

基本数据类型的变量  栈(因为线程安全,栈帧出栈了以后被销毁)

final域        方法区(“常量”在方法区)

final变量       栈(这个问题在知乎问过,答案是final仅仅在编译器提供对修饰变量的约束,使其无法改变引用,但是本质与普通变量无异)

※ 总结来看,无论什么变量(在方法中申明的局部变量),都是存储在栈帧的局部变量表中的。

JVM备忘点(1.8以前)的更多相关文章

  1. JVM内存知识备忘

    又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...

  2. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  3. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  4. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  5. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  6. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  7. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  8. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  9. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

随机推荐

  1. NavigatorOnLine.onLine——判断设备是否可以上网

    概述:返回浏览器的联网状态.正常联网(在线)返回true,不正常联网(离线)返回false.一旦浏览器的联网状态发生改变,该属性值也会随之变化. 1.语法 let online = window.na ...

  2. numix Docky

    今天我们介绍这款主题适用于 Docky 启动器的 numix 主题,关于 Docky 大家已经应该很熟悉了,一款类似 Mac 底部软件停放的快捷启动码头.如图: 这款主题是 Docky 的主题,如果你 ...

  3. Intellij IDEA 快捷键大全【转】

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文 ...

  4. 基于PhotoView的头像/圆形裁剪控件

    常见的图片裁剪有两种,一种是图片固定,裁剪框移动放缩来确定裁剪区域,早期见的比较多,缺点在于不能直接预览裁剪后的效果:还有一种现在比较普遍了,就是裁剪框固定,直接拖动缩放图片,便于预览裁剪结果. 我做 ...

  5. POJ2729 Robocode(离散化与模拟-----提醒曾经爱玩游戏的自己没做出这个

    题目链接 :http://poj.org/problem?id=2729 题目很长,有不少也是废话.类似小时候玩的坦克大战.每个坦克速度为10,炮弹速度为20.子弹出界就消失,坦克出不了界限.相向的子 ...

  6. 5.Redis的持久化

    Redis中数据的持久化有两种方式:RDB(Redis DataBsse) 和 AOF(Append Only File),默认采取的是RDB方式 RDB 1.是什么:在指定的时间间隔内将内存中的数据 ...

  7. centos6/7启动故障排错

    centos6启动流程修复: 实验一:删除initramfs-2.6.32-754.el6.x86_64.img进行恢复 该文件很重要initramfs-2.6.32-754.el6.x86_64.i ...

  8. 02.python网络爬虫第二弹(http和https协议)

    一.HTTP协议 1.官方概念: HTTP协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(www.world wide web) 服务器传输超 ...

  9. java实战(一)-------jdk环境在windows安装及配置

    1.jdk官方下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载windows的版本:jdk-13.0 ...

  10. python3 Pandas

    一.Pandas 1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,主要用于数据处理(数据整理,操作,存储,读取等) 2.http://pa ...