HelloWorld.java源码如下:

 

public class HelloWorld {

public static void main(String[] args) {

String s ;

s = "HelloHorld";

System.out.println("s = " + s);

}

}

画图分析:

1. jvm 内存分布图

概括:1文件 Helloworld.java

4.class  String[].class

String.class

Helloworld.class

System.class

3方法     toString()

println();

main();

2变量    args s

2.jvm 工作流程

首先自然是将源码进行编译啦!生成HelloWorld.class的字节码文件。

当输入java  HelloWorld的命令运行java程序时,系统收到指令,就会创建java虚拟机线程,这个进程开始从classpath中找到HelloWorld.class文件,读取这个文件中的二进制数据,然后把HelloWorld类的类信息存放到方法区的类代码区中。这一过程称为类的加载过程。

之后JVM主线程会去找main()这个主方法,开始执行方法里面的指令。main()方法中形参args是字符串数组类型的,因为String[]也是一个对象,所以在堆中开辟属于它的内存空间。可以通过键盘输入参数传递给args这个形参,保存在String[]的内存空间中。

第一条指令String  s;由于这个变量是在main()方法里面,它是一个局部变量,所以jvm就为它栈中开辟了一块空间。

s = ”HelloWorld”中, ”HelloWorld”是常对象,在方法区的数据区的常量数据区开辟内存空间,开辟好空间后将这块空间的地址付给了变量s,所以变量s存放的是地址,而不是”HelloWorld”这个字符串。

System.out.println(“s= ” + s)中,因为System是java标准类库中的类,位于java,lang下,这个包是在java程序启动时候,JVM的classLoder就会直接将它加载进来的,所以不需要人工手动导入就可以直接使用,这个System类在堆中开辟了三块地址空间,分别属于System.in,System.out,System.error。System.out.println()复写了objecttoString()方法,得到返回来的s所指向地址的值,然后向控制台输出,最后换行。

输出结果:s = Hello Horld!

ps:解释一下 main方法

public static void main(String[] args)

static :意味着主函数随着类加载就存在了 (通过类查找)

(String[] args):主函数的参数 args 参数类型 为字符串数组对象

个人学习心得,欢迎批评指正              by-publicmain

Helloworld 在jvm 内存图的更多相关文章

  1. 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;

    Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...

  2. JVM内存图

  3. 最简单的JVM内存结构图

    JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆. /** * @author :jiaolian * @dat ...

  4. JVM学习03_new对象的内存图讲解,以及引出static方法(转)

    目录 -=-讲解对象创建过程中,-=-堆内存和栈内存的情况 -=-构造函数对类对象的成员变量的初始化过程 -=-构造函数出栈 -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决? -= ...

  5. 深入理解JVM一JVM内存模型

    前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 一.运行流程 我 ...

  6. JVM内存模型与GC算法(简介)

    JVM内存模型如上图,需要声明一点,这是<Java虚拟机规范(Java SE 7版)>规定的内容,实际区域由各JVM自己实现,所以可能略有不同.以下对各区域进行简短说明. 1.1程序计数器 ...

  7. 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失

    所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...

  8. 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

  9. jvm系列(二):JVM内存结构

    JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...

随机推荐

  1. mui的ajax例子2

    mui.post()方法 前端页面: <!DOCTYPE html><html><head> <meta charset="utf-8"& ...

  2. 使用腾讯IP分享计划网站中的纯JS省市区三级联动

    JS地址:http://ip.qq.com/js/geo.js 实例如下: <!DOCTYPE html> <html> <head> <title>省 ...

  3. hadoop上传文件失败报错(put: Cannot create file/eclipse.desktop._COPYING_. Name node is in safe mode.)

    解决办法: 离开安全模式方法:执行以下命令即可 bin/hadoop  dfsadmin -safemode leave 若不处理安全模式的话,web服务无法启动,dfsadmin report结果异 ...

  4. C#之razor

    学习的文章在这里:http://www.cnblogs.com/yang_sy/archive/2013/08/26/ASPNET_MVC_RAZOR_ENGINE.html 1.视图开始文件_Vie ...

  5. World Wind Java开发之三 显示状态栏信息(转)

    http://blog.csdn.net/giser_whu/article/details/40920315 先来看下本篇博客索要达到的效果: 找到源码下的gov.nasa.worldwind.ut ...

  6. cloudera manager的卸载以及重新安装

    1 卸载cloudera 参照 http://www.cnblogs.com/chenfool/p/3738540.html Cloudera 的官方介绍: http://www.cloudera.c ...

  7. javaweb基础(27)_jsp标签库实例

    一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...

  8. 多GPU设备处理点积示例

    多GPU设备处理点积示例,项目打包下载 /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Cor ...

  9. SpringBoot学习记录(一)

    1. Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方式是 ...

  10. CXF学习记录

    1 apache CXF入门 1.1 下载 官网:cxf.apache.org 下载CXF的开发包: Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 X ...