Java运行机制

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

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

Java运行过程

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

【类加载器:类加载器负责加载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中程序执行过程及内存分配情况:
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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. Eclipse属性文件编辑器---Properties Editor

    今天在用 Eclipse 来编辑 .properties 文件时,写的中文会自动转为 Unicode 编码,完全不知道自己的中文写的是什么!! 于是查了一下,网上推荐,在Eclipse 中 安装一个 ...

  2. Java设计模式-迭代子模式(Iterator)

    顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对 ...

  3. PHP Web System Optimization(undone)

    目录 . 引言 . PHP Pool . listen . Process Manage(PM) . pm.max_children . PHP DB Connection Pool(数据库连接池) ...

  4. Codeforces 46D Parking Lot

    传送门 D. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. MyEclipse------File类的各种方法

    usingFile.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  6. Jquery,ajax返回json数据后呈现到html页面的$.post方式。

    ------------------------------------------------------完整版------------------------------------------- ...

  7. WinsockExpert+NC抓包上传之拿WEBSHELL

    知识补充: nc上传漏洞在原理上同动网上传漏洞一样,都是利用计算机在读取字符串时,遇到'\0'(00)时,认为字符串结束了,从而丢掉后面的字符串,正如unicode编码特性一样,可被人利用,尽管在这里 ...

  8. APN APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。

    apn 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. 对于手机用户来说,可 ...

  9. glibc 简介:

    glibc 编辑 glibc是GNU发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服 ...

  10. PHP5.3中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

    转自:http://www.htmer.com/article/716.htm 最近在PHP官网上看到又有新版的PHP下载了,于是上去找找For Windows的版本,可是一看确傻眼了,一共给了四个版 ...