Java内存解析 程序的执行过程

转载 2018年04月16日 01:48:02

原文地址http://www.cnblogs.com/111testing/p/8443549.html

Java内存解析

栈、堆、常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,简单讲解Java内存分配方面的知识。

    首先我们先来讲解一下内存中的各个区域。

stack(栈)

    存放基本类型的数据和对象的引用,即存放变量。

    如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中的内存中;

    如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。

heap(堆)

   存放new产生的数据。

data segment

   分为静态域和常量域。

静态域

   存放在对象中用static定义的静态成员(即静态变量,同理,如果该静态变量是基本类型则将变量名和值存入静态域,如果是引用类型则指向new出的对象)。

常量池

   常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。

   code segment:存放代码。

   下面我来举几个简单的小例子来让大家认识一下这几个区域具体存放的内容:

   注:例1和例2中大家要注意String类型不是基本数据类型,所以它可以创建对象,并且它的值是放在常量池中的。

例1. 非静态和静态变量的创建

   String str = "abc";  static Int a = 10;  //创建String类型的变量str;创建Int类型变量a

   内存解析:

   这里的str是非静态变量所以将其放入到栈中,而静态变量a则需要放入静态域中,对于变量值"abc"和10则都应该放入到常量池当中

例2. 对象的创建

   String str=new String("abc");  //创建String类型的对象str

   内存解析:

   这里的str是String类型的对象,所以放入栈中,而new出来的东西则放入到堆中,对于初始值"abc"则放入到常量池中即可。

 

例3. 数组的创建

   Int s[] = new Int[3];s[0]=3;s[1]=2;s[2]=3;

   内存解析:

   这里的s[]是一个数组变量,所以放入到栈中,new出来的东西还是放入到堆中,最后的每个元素的值则放入到常量池当中。

 

 

   程序的执行过程


Java程序执行过程的内存分析

类的属性1.属性(field),或者叫成员变量 2.属性用于定义该类或该类对象包含的数据或者说静态属性 3.属性的作用范围是整个类体 4.**在定义成员变量时,可以对其初始化,如果不对其初始化,Jav...
  • yangzheng0515
  • yangzheng0515
  • 2016-11-12 15:14:17
  • 1494

JVM原理详解-Java程序的执行过程

一、java虚拟机的生命周期:   Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-05-23 13:30:25
  • 4237

jQuery.js执行过程分析

  JavaScript是一门基于对象的语言,而它的对象技术的实现又和其他语言有着很大的差异,在JavaScript中,一个类的定义一般采用下面这种模式(我所看到的):// 定义一个构造函数;test...
  • WaterSugar
  • WaterSugar
  • 2006-11-22 15:19:00
  • 2969

shell脚本执行过程分析

一.shell脚本父子进程分析   代码: [cpp] view plain copy #!/bin/bash   echo $$  ...
  • qq_21439971
  • qq_21439971
  • 2017-01-11 17:12:00
  • 2344

java中的多态及其内存分析

多态(polymorphism):在执行期间(而非编译器)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。由于是在运行期的动态实现,直到new出对象才能确定具体调用的哪个方法,因此多态又叫...
  • lyg673770712
  • lyg673770712
  • 2013-09-08 22:03:51
  • 2434

linux 应用程序的执行过程详解

1.父进程的行为: 复制,等待 执行应用程序的方式有很多,从shell中执行是一种常见的情况。交互式shell是一个进程(所有的进程都由pid号为1的init进程fork得到,关于这个话题涉及到Li...
  • wu20093346
  • wu20093346
  • 2015-07-23 10:48:31
  • 613

程序的运行机制——CPU、内存、指令的那些事

序言 说起计算机大家并不陌生,在计算机上又运行着各种程序,如QQ、微信等。这些程序有可以为我们做很多事情,能聊天、能玩游戏等等。那么这些看似复杂的程序在计算机中到底是怎么运行起来的呢?其实非常简单,...
  • u013635487
  • u013635487
  • 2017-03-11 09:55:49
  • 1535

数据库SQL解析执行过程

SQL解析执行的主要步骤: 1. 对提交SQL的进行判断是否已解析和生产执行计划,对已生成执行计划的SQL直接执行返回结果 2. 对SQL进行语法规范检查 3. 对SQL进行语义检查,使用表、字段、函...
  • u011098327
  • u011098327
  • 2017-02-03 16:49:28
  • 269

程序执行过程的内存分析(简单篇)

1.默认值问题:    引用类型-null,String-null,int-0,float-0.0,boolean-false,char-\u0000;    全局变量会默认初始化,但局部变量则不会默...
  • qq_38331606
  • qq_38331606
  • 2018-02-24 16:34:13
  • 40

一个Java程序的执行过程

 我们手工执行java程序是这样的: 1 在记事本中或者是UE的文本编辑器中,写好源程序; 2 使用javac命令把源程序编译成.class文件;   编译后的.class(类字节码)文件中会包含以下...
  • jjeggplant4000
  • jjeggplant4000
  • 2008-02-28 21:21:00
  • 3762
收藏助手
不良信息举报
您举报文章:Java内存解析 程序的执行过程
举报原因:
原因补充:

(最多只允许输入30个字)