java面向对象的内存分析

简介: 1、Java虚拟机的内存可以分为5个部分栈stack、堆heap、方法区method area、本地方法栈(Native Method stack)、寄存器(PC Register




1、Java虚拟机的内存可以分为5个部分


栈stack、堆heap、方法区method area、本地方法栈(Native Method stack)、寄存器(PC Register)


2.栈的特点:


(1)栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)


(2)JVM为每个线程创建一个栈,用于存放该线程执行方法的局部变量(①实际参数②方法{ }内部的变量等)


(3)栈属于线程私有,不能实现线程间的共享


(4)栈的存储特性是“先进后出,后进先出”


(5)栈是由系统自动分配。速度快!栈是一个连续的内存空间!


3.堆的特点:


(1)凡是new出来的东西,都在堆当中;堆内存里面的东西都有一个地址值:16进制(0x开头的都是16进制)


(2)JVM只有一个堆,被所有线程共享


(3)堆是一个不连续的内存空间,分配灵活,速度慢!


堆内存里面的数据,都有默认值。规则:

①整数,默认为0

②浮点数,默认为0.0

③字符,默认为’\u0000’

④布尔,默认为false

⑤引用类型,默认为null


4.方法区的特点:


(1)JVM只有一个方法区,被所有线程共享!


(2)方法区实际上也是堆,用来存放程序中永远不变或唯一的内容(.class相关信息、方法的信息、静态变量、字符串常量等)


5.本地方法栈:


与操作系统有关


6.寄存器:


与CPU有关


7.实例


7.1数组内存图


53a4bfa17b2648d29db413c0e5950373.png


5a895d800b814cdbb14228e39eee7fff.png


7.2对象内存图


dd211c868cd2493d9b9fada0f31a1c7e.png


7.3静态static的内存图


c5cf922bbb80431fad94bfc9ecd5e64e.png


7.4递归的内存图


c2ad12932e1040b7879e3afb558a70b7.png

目录
相关文章
|
2天前
|
存储 安全 Java
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
32 13
|
2天前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
26 10
|
2天前
|
存储 运维 Java
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
23 9
|
2天前
|
缓存 监控 算法
Java内存怎么优化
【7月更文挑战第11天】Java内存怎么优化
11 3
|
2天前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
17 4
|
2天前
|
安全 Java
Java面试题:解释synchronized关键字在Java内存模型中的语义
Java面试题:解释synchronized关键字在Java内存模型中的语义
8 1
|
1天前
|
存储 算法 Java
JAVA内存模型与JVM内存模型的区别
JAVA内存模型与JVM内存模型的区别
|
数据可视化 Java
java内存分析和线程分析----使用命令行或者可视化工具jvisualvm
java内存分析和线程分析----使用命令行或者可视化工具jvisualvm
129 0
|
2天前
|
缓存 安全 Java
Java中线程池如何管理?
【7月更文挑战第11天】Java中线程池如何管理?
8 2
|
2天前
|
安全 算法 Java
Java中线程安全怎么做?
【7月更文挑战第11天】Java中线程安全怎么做?
9 2