• 程序在内存中的执行过程-1


      学习Java,比较重要的一个思想就是分析内存中程序执行的过程。

      废话不多说,我们首先要知道的是程序比如我们编写的.java程序,存放的位置是在硬盘的某一个区域中,如果不执行这个程序,那么它就默默地存在,不起任何作用。当我们开始执行某一个程序时,程序首先要做的事就是把自己也就是代码,全部load或者说装载到内存区域中去。然后Windows本身的系统代码会找到自己编写的程序代码的main方法,从main方法开始执行程序。第三,当这个程序开始执行之后,程序中的所有数据会被内存分类管理起来,一般来说内存管理最基础的会分成四部分:code segment(存放代码)、data segment(存放静态变量和字符串常量)、stack(存放局部变量)、heap(存放new 出来的东西)。

      真正执行的时候,代码首先会被放在code segment中,OS(操作系统)找到相关的main方法后,才开始执行后面的代码。

      现在,我用一个简单的例子程序来说明一下:

    public class practic1 {
      public static void main(String[] args) {//当OS找到main 方法,开始执行后面的代码
        int a = 123;//声明一个变量a,a是在main方法中声明的,所以是个局部变量也是一个基本类型的变量,赋给它的值123会存放在stack区域中。
        double b = 3.1415;//同上
        String c = "Hello World";//声明一个变量c,c也是在main 方法中声明的,但是定义c这个变量的是一个字符串型,它是引用类型的变量,所以赋给它的值会存放在heap区域中,c本身是存放在stack区域中,它本身保存的其实是它的值在heap区域中的首地址。
        System.out.println("" + a + b + c);//现在要打印输出这几个变量的值,a和b都是存放在stack区域中,所以程序会从这个区域中去调用它们的值。调用c的时候,是调用的c保存的地址所指向heap区域中的内容。
      }
    }

      因为学习进度的原因,目前就说这么多,后面还会持续更新这一主题的内容。如果觉得有用,请动手点个赞,不喜勿喷!

  • 相关阅读:
    HTML5 ViewPort 资料收集
    [ASP.NET 技术点滴] Jquery 前端验证
    [转帖]Asp.NET 弹出页面
    [转]ASP.NET 页生命周期概述
    C#时间转整型(时间戳),模仿php strtotime函数的部分功能
    [转]使用微软的官方类库CHSPinYinConv获得汉字拼音
    [转]ASP.NET数据库连接字符串总结
    gradle 生成 pom,引用mybatis-plus源代码到自己的工程中
    困扰的问题终于解决了-docker时区不正确的问题修改记
    mybatis plus3.1.0 热加载mapper
  • 原文地址:https://www.cnblogs.com/maopao55555/p/6083626.html
Copyright © 2020-2023  润新知