基础知识《零》---Java程序运行机制及运行过程

时间:2022-12-19 10:05:09

Java运行机制

Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU;对于不同的运行平台,有不同的虚拟机;Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”。

基础知识《零》---Java程序运行机制及运行过程

Java垃圾回收(Garbage Collection):不用使用的内存空间应该回收;在C/C++等语言中,由程序员负责回收无用的内存;Java语言消除了程序员回收无用内存的职 责,它提供一种系统级线程跟踪存贮空间的分配情况,并在JVM空闲的时候,检查并释放那些可以被释放的内存空间;垃圾收集在java程序运行过程中自动进 行,程序员无法控制和干预。

Java运行过程

Java源文件(*.java)——>Java编译器——>字节码文件(*.class)——>类装载器——>字节码校检器—— >解释器——>操作系统(Windows、Linux等)整个文件Load到内存区,一系列动作之后形成操作系统认识的代码,操作系统找到 main方法开始实行。

基础知识《零》---Java程序运行机制及运行过程

【类加载器:类加载器负责加载java API(JVM+java API被称为java运行时),其实这些jar包主要分布在jre/lib下,这些我们可以通过在java命令后加-verbose:class(如下图),可见第一个被载入的java类是Object类。】

以下转载自360图书馆

heap——>new 出来的东西放在这里

stack——>局部变量

data segment——>静态变量或字符串常量

code segment——>存放代码

局部变量:方法或是语句块内部定义的变量(local variable)

成员变量:方法外部、类内部定义的变量,也叫做全局变量(glbal valiable)

Java Application初步

一个源文件中最多只能有一个public类,其他类的个数不限。程序的入口是:

public static void main(String[] args){...}

Java 语言严格区分大小写和格式。

java中程序执行过程及内存分配情况:
 基础知识《零》---Java程序运行机制及运行过程

下面用一个程序例子来说明内存的分配,程序如下:

基础知识《零》---Java程序运行机制及运行过程

注意:下面图中的堆和栈应该互换一下,本人在画图时搞反了!

1.首先用new定义了一个对象test,(于用new来定义对象或变量)其内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

2.然后定义了一个整形变量date,其值为9.内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

3.接着用new定义了两个对象,d1和d2.其内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

4.接着用test来调用其方法change1,调用了方法,进行了值传递。在调用时将9赋予变量i,后面在函体内只是改变了变量i的值,而没有改变date的值。内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

5. 由于变量i是在调用函数change时分配的,在函数调用结束就回收了变量i的内存分配。调用完后内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

6.调用test的change2函数,将d2作为参数传递给形参。在调用函数时在内存堆中分配一个对象b的空间,然后在内存栈中通过值传递分配实际单元与值。在调用change2时,执行函数体内的语句,只是改变了对象b中的内容,而d1中的内容未改变。内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

7.在调用完函数后,回收b的内存空间(包括堆与栈中的内容)。内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

8.调用test的方法change3方法,在内存的堆中分配一块区域给形参对象b,在栈中的分配指向d1的区域,器内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

9.然后执行函数中的语句,将对象d1中的值改变为22,调用函数结束后,回收堆栈中的内存空间。其内存分配情况如下:

基础知识《零》---Java程序运行机制及运行过程

注意:上面图中的堆和栈应该互换一下,本人在画图时搞反了!

综上所述,内存分配情况是:

1.new分配的变量在堆区域中,局部变量在栈区域中。

2.要想改变值时,只有当通过引用调用其方法才有作用发生。

程序在执行时,内存的情况是非常重要的,只有弄懂内存分配情况,才能跟好解决问题。

基础知识《零》---Java程序运行机制及运行过程的更多相关文章

  1. 【JAVA】【基础知识】Java程序执行过程

    1. Java程序制作过程 使用文本编辑器进行编辑 2. 编译源文件,生成class文件(字节码文件) javac源文件路径. 3.运行程序class文件.

  2. Java程序在内存中运行详解

    目录 Java程序在内存中运行详解 一.JVM的内存分布 二.程序执行的过程 三.只有一个对象时的内存图 四.两个对象使用同一个方法的内存图 五.两个引用指向同一个对象的内存图 六.使用对象类型作为方 ...

  3. 《Java基础知识》Java继承的概念和实现

    继承时类和类之间的关系,是一个很简单很直观的概念,与显示生活中的继承(例如儿子继承了父亲财产)类似. 继承可以理解为一个类从另一个类中获取方法和属性的过程.如果类B继承于类A,那么类B就拥有类A的属性 ...

  4. DOS环境下含包并引用第三方jar的java程序的编译及运行

    DOS环境下含包并引用第三方jar的java程序的编译及运行 1.程序目录机构 bin:class文件生成目录 lib:第三方jar包目录 src:源程序文件目录 2.程序代码: 3.程序编译 jav ...

  5. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  6. Java程序运行内存机制

    Java程序运行内存机制 栈内存包留调用方法.变量的区域,堆内存是new对象的区域,方法区为保存class文件的区域. 程序刚开始时,先加载类文件相应的数据到方法区,然后就从main()方法开始执行. ...

  7. java 程序运行的基础知识【Java bytecode】

    聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...

  8. java入门(1) 程序运行机制及运行过程

    首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. ...

  9. Java基础知识总结之垃圾回收机制

    垃圾回收机制 Java垃圾回收机制是Java语言的重要功能之一.当程序创建对象,数组等引用类型对象时,系统会自动在内存区为之分配一块内存,对象就保存在这块内存区内,当这块内存不再被任何变量引用时,这块 ...

随机推荐

  1. 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...

  2. RAID详细介绍

    RAID详细介绍 RAID 0 又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就 ...

  3. GDB学习之道:GDB调试精粹及使用实例

    一:列文件清单  1. List  (gdb) list line1,line2 二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...

  4. MongoDB学习(翻译2)

    C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命名空间到您的程序中: usin ...

  5. 如何获取微信小店小程序的AppID

    2017年11月16日,微信有一个重磅的宣布:为了帮商家在微信内快速开店,方便商家和用户之间沟通,所有认证公众号,可快速创建微信小店小程序.这个改变是否能给微信小店带来新的生机?还需要时间的考验.微信 ...

  6. 50道JAVA基础编程练习题

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...

  7. HDU 2824 The Euler function --------欧拉模板

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. 【Android】RxJava的使用(三)转换——map、flatMap

    前两篇Android RxJava的使用(一)基本用法.Android RxJava的使用(二)Action介绍了RxJava的基本用法,对Rxjava还不了解的请先看以上两篇.这篇为大家讲解RxJa ...

  9. Apache优化:修改最大并发连接数(转)

    Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性,被广泛应用于计算机技术的各个领域.现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器. 尽 管如此,在实际 ...

  10. oracle数据库基本操作

    我们主要学习数据库的一些基本操作,比如如何在数据库创建用户,授权,删除用户,回收权限,为用户加锁或者解锁等一些常用的操作. 首先,我们要知道数据库中创建用户的语句怎么写,看下面: 1.创建用户 cre ...