zoukankan      html  css  js  c++  java
  • Helloworld 在jvm 内存图

    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

     

          

  • 相关阅读:
    js分页--存储数据并进行分页
    纯CSS多级菜单
    ini文件操作
    XML文件数据操作
    身份证号码验证
    将DataSet(DataTable)转换成JSON格式(生成JS文件存储)
    将JSON(List集合)转成DataSet(DataTable)
    js打印(控件)及多种方式
    了解切面编程思想
    20190429版本-测试过程回溯
  • 原文地址:https://www.cnblogs.com/publicmain/p/6919255.html
Copyright © 2011-2022 走看看