JVM学习01:内存结构

写在前面:本系列分享主要参考资料是  周志明老师的《深入理解Java虚拟机》第二版。

内存结构知识要点Xmind梳理

案例分析

分析1

package com.hs.jvm;

public class JVMTest1 {

    public static void main(String[] args){

        /**
* intger1 和 intger2都是Integer的引用,线程运行时位于虚拟机栈中新建的栈帧中
* 该引用持有指向堆中的Integer实例的引用,而两实例在堆中的地址是不同的
*/ Integer intger1 = new Integer(1);
Integer intger2 = new Integer(1); /**int1和int2都指向方法区中常量池中的同一内存空间*/
int int1 = 1;
int int2 = 1; System.out.println(intger1 == intger2);//false
System.out.println(int1 == int2);//true
} }

分析2

package com.hs.jvm;

/**JVM在类加载的时候,将类的信息放入方法区*/
public class JVMTest2 { /**J将方法的信息放入方法区*/
public static void main(String[] args){ /**
* People类:People类的信息在方法区中
* People实例对象:new出来的People实例对象在堆中,并持有对方法区People类信息的引用
* p:p是对new出来的People实例对象的引用,放在栈中,指向new出来的People实例对象内存地址
* */
People p = new People("TYJ", 18); /**
* 执行playing方法时
* 先根据p定位堆中的People实例对象
* 再根据People实例对象找到方法区People类的playing方法字节码
* 最后执行playing方法
* */
p.play();//TYJ is playing
} /**main方法的执行逻辑
* (1)用户创建了一个People对象,运行时JVM首先会去方法区寻找该对象的类型信息,没有则使用类加载器classloader将People.class字节码文件加载至内存中的方法区,并将People类的类型信息存放至方法区。
* (2)接着JVM在堆中为新的People实例分配内存空间,这个实例持有着指向方法区的People类型信息的引用,引用指的是类型信息在方法区中的内存地址。
* (3)在此运行的JVM进程中,会首先起一个线程跑该用户程序,而创建线程的同时也创建了一个虚拟机栈,虚拟机栈用来跟踪线程运行中的一系列方法调用的过程,每调用一个方法就会创建并往栈中压入一个栈帧,栈帧用来存储方法的参数,局部变量和运算过程的临时数据。上面程序中的p是对People的引用,就存放于栈中,并持有指向堆中People实例的内存地址。
* (4)JVM根据p引用持有的堆中对象的内存地址,定位到堆中的People实例,由于堆中实例持有指向方法区的People类型信息的引用,从而获得add()方法的字节码信息,接着执行add()方法包含的指令。
*/
}
------------------------------------------------------------------
package com.hs.jvm; public class People {
private String name;
private int age; public People(String name, int age) {
this.name = name;
this.age = age;
}
public void play(){
System.out.println(this.name + " is playing");
}
}

JVM学习01:内存结构的更多相关文章

  1. JVM学习之 内存结构

    目录 一.引言 1.什么是JVM? 2.学习JVM有什么用 3.常见的JVM 4.学习路线 二.内存结构 1. 程序计数器 1.1 定义 1.2作用 2. 虚拟机栈 2.1定义 2.2栈内存溢出 2. ...

  2. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  3. JVM学习笔记——内存结构篇

    JVM学习笔记--内存结构篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存结构部分 我们会分为以下几部分进行介绍: JVM整体介绍 程序计数器 虚拟机栈 本地方法栈 堆 方法 ...

  4. JVM学习笔记——内存模型篇

    JVM学习笔记--内存模型篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存模型部分 我们会分为以下几部分进行介绍: 内存模型 乐观锁与悲观锁 synchronized优化 内 ...

  5. JVM运行时内存结构学习

    学习JVM运行模型比较重要,先看一幅图片: 运行时数据区(内存结构) :  1.方法区(Method Area)类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来说,所 ...

  6. 【高频Java面试题】简单说说JVM堆的内存结构和GC回收流程

    目录 前言 JVM堆内存结构简述 JVM堆内存结构图 堆初体验 结构详情 新生代 老年代 永久代/元空间 GC回收流程 GC回收流程图 GC回收详细流程 查看JDK自带可视化堆空间图 总结 前言 我们 ...

  7. JVM之--Java内存结构(第一篇)

    最近在和同事朋友聊天的时候,发现一个很让人思考的问题,很多人总觉得JVM将java和操作系统隔离开来,导致很多人不用熟悉操作系统,甚至不用了解JVM本身即可完全掌握Java这一门技术,其实个人的观点是 ...

  8. JVM原理及内存结构

    JVM是按照运行时数据的存储结构来划分内存结构的,JVM在运行java程序时,将它们划分成几种不同格式的数据,分别存储在不同的区域,这些数据统一称为运行时数据.运行时数据包括java程序本身的数据信息 ...

  9. JVM宏观认知&&内存结构

    JVM宏观认知 1.什么是虚拟机? 虚拟机是一种软件. 可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM). 2.什么是Java虚拟机(JVM)? JVM是一种将字节码转化为 ...

随机推荐

  1. JS代码简单一段即可破解QQ空间删除说说

    代码如下: 简单的一段代码即可搞定啦!!是不是很简单! var delay = 1000; function del() { document.querySelector('.app_canvas_f ...

  2. ubuntu 装机步骤表

    步骤 1. root 步骤 apt-get update ; apt-get upgrate apt-get install git zsh apt-get install -y make build ...

  3. keepalive配置mysql自动故障转移

    keepalive配置mysql自动故障转移 原创 2016年02月29日 02:16:52 2640 本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户 ...

  4. sprinmvc与 Struct2框架的区别

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  5. hyper-v下的ubuntu虚拟机分辨率修改

    修改/etc/default/grub sudo vim /etc/default/grub 改变前: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash&qu ...

  6. Oracle表空间不足;查询表空间使用率(unable to extend lob segment SYS_LOB0000076749C00006$$ by 8192 in tablespace USERS)

    查询表空间对应地址 *),) total_space from dba_data_files order by tablespace_name; //方案一:修改表空间大小(32000可改为想要的数值 ...

  7. efcore migration

    实体------->migration------->db ---------------------------------------------------------------- ...

  8. 6.3 基于二分搜索树、链表的实现的集合Set复杂度分析

    两种集合类的复杂度分析 在[6.1]节与[6.2]节中分别以二分搜索树和链表作为底层实现了集合Set,在本节就两种集合类的复杂度分析进行分析:测试内容:6.1节与6.2节中使用的书籍.测试方法:测试两 ...

  9. Django建站+Vuejs前端

    第一节 @注意 千万注意格式.标签名字: 浏览器开发者模式修改页面不显示:在开发者模式下(F12进入),打开设置页面(F1),勾选 Disable cache (while DevTools is o ...

  10. python实战:用70行代码写了一个山炮计算器!

    python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...