文档章节

001. 深入JVM学习—Java运行流程

易冥天
 易冥天
发布于 2018/06/22 12:04
字数 870
阅读 81
收藏 14

1. Java运行流程图

Java运行流程图

2. Java运行时数据区

Java运行时数据区

3. Java虚拟机栈

  1. 栈内存是线程私有的,其生命周期和线程相同;

  2. 虚拟机栈描述的是Java方法执行的内存模型:执行一个方法时会产生一个栈帧随后将其保存到栈(先进后出)的顶部,方法执行完毕后会自动将此栈帧进行出栈。顶部的栈帧就表示的是当前的方法;

    • 如果请求的栈的深度过大,虚拟机可能会抛出StackOverflowError异常,
    • 如果虚拟机的实现中允许虚拟机栈动态扩展,当内存不足以扩展栈的时候,会抛出OutOfMemoryError异常。
  3. 图介绍

    Java虚拟机栈

  4. 栈帧主要组成成分

    • 局部变量表(Local Variables):方法的局部变量或形参,其以变量曹槽(solt)为最小单位,只允许保存32位长度的变量,如果超过32位则会开辟两个连续的solt(64位长度,long和double);
    • 操作数栈(Operand Stack):表达式计算在栈中完成;
    • 指向当前方法所属的类的运行时常量池的引用(Reference to runtime constant pool):引用其他类的常量或者使用String池中的字符串;
    • 方法返回地址(Return Address):方法执行后需要返回调用此方法的位置,所以需要在栈帧中保存方法返回地址。

4. Java内存管理

  1. JVM中的运行时数据区包括:

    • 程序计数器(Program Counter Register)
    • Java栈(Stack)
    • 本地方法栈(Native Method Stack)
    • 方法区(Method Area)
    • 堆(Heap)
  2. 栈是运行时的单位,而堆是存储的单位。

    • 栈因为是运行单位,里面存储的信息都跟当前线程(或程序)相关的信息。包括局部变量、程序运行状态、方法返回值等等;
    • 堆只是保存对象信息。
  3. 图解

    Java内存管理

5. 相关知识

  1. JVM:Java虚拟机,所有程序都要求运行在JVM上,考虑到了可移植性问题。

  2. Java程序中可以使用native关键字实现本地C函数的调用。但是这些都属于程序运行的辅助手段,而真正的程序都运行在“运行时数据区”之中。

  3. 运行时数据区分为以下几个内存空间:

    • 堆内存:保存所有引用数据类型的真实信息;
    • 栈内存:基本类型、运算、指向堆内存的指针;
    • 方法区:所有定义的方法的信息都保存在此区之中,此区属于共享区;
    • 程序计数器:是一个非常小的内存空间,小到可以忽略;
    • 本地方法栈:每一次执行递归的方法处理的时候实际上都会将上一个方法入栈
  4. Java之中存在对象池的概念,对象池是对整个常量的常量池的规则破坏,因为在JVM启动的时候,所有常量都已经分配好空间,但是String中的intern()方法却可以打破限制,动态的进行常量池的内容设置。

© 著作权归作者所有

易冥天
粉丝 33
博文 161
码字总数 80860
作品 0
海淀
程序员
私信 提问
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
103
0
java 7 入门书籍

一、Java从入门到精通 《Java从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识。 《Java从入门到精通(第3版...

modernizr
2014/05/15
6.9K
9
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
112
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
128
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
112
0

没有更多内容

加载失败,请刷新页面

加载更多

树莓派Zero的初始化

概述 树莓派0拿到手之后,真是爱不释手,如此小巧,配置不逊于一些低端的VPS,又具备IO口/wifi/蓝牙,还可选配摄像头.实乃居家必备之神器. 但是体积如此之小巧,用起来还是有一些问题的.比如usb口过...

一曲忠臣的战歌
35分钟前
2
0
ViewPager懒加载极致优化

目录介绍 01.ViewPager简单介绍 02.ViewPager弊端分析 03.ViewPager预加载 04.ViewPager部分源码 05.懒加载出现问题 06.如何实现预加载机制 07.懒加载配合状态管理器 吕诗禹想换个工作,渴望...

杨充
52分钟前
1
0
shadeEffect动态消失渲染

import QtQuick 2.0ShaderEffect { id:genieEffect anchors.centerIn: parent property variant source mesh:GridMesh{resolution: Qt.size(10,10)} propert......

蓝栩液枫
55分钟前
3
0
苦逼程序员的真实生活 

程序员这个行业虽然待遇还不错,但是不仅累,拿命去换取的,很多时候也是很苦逼的,有多少程序员还在苦苦追求心里的那个她。我就是千万程序员大军中的一员,其中有多苦逼我最清楚,以下的12张...

linux服务器架构
57分钟前
5
0
idea 创建maven 分支apply-patch中模块

1.点击idea 有上角的 project structure 2.选择modules-->点击“+”-->new module--->maven-->添加group id=com.paic.gamma.apply ,artifactid-分支名(qilu-bank),version=1.0-SNAPSHOT ......

qimh
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部