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
Helloworld 在jvm 内存图的更多相关文章
- 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;
Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...
- JVM内存图
- 最简单的JVM内存结构图
JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆. /** * @author :jiaolian * @dat ...
- JVM学习03_new对象的内存图讲解,以及引出static方法(转)
目录 -=-讲解对象创建过程中,-=-堆内存和栈内存的情况 -=-构造函数对类对象的成员变量的初始化过程 -=-构造函数出栈 -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决? -= ...
- 深入理解JVM一JVM内存模型
前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 一.运行流程 我 ...
- JVM内存模型与GC算法(简介)
JVM内存模型如上图,需要声明一点,这是<Java虚拟机规范(Java SE 7版)>规定的内容,实际区域由各JVM自己实现,所以可能略有不同.以下对各区域进行简短说明. 1.1程序计数器 ...
- 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...
- 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...
- jvm系列(二):JVM内存结构
JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...
随机推荐
- JavaWeb前端笔记
day06 回顾: bootstrap: css框架,html/css/js集于一身,ie 6/7/8兼容有问题 开发响应式页面,使用于不同的上网设备 使用步骤: 1.导入bootstrap.css ...
- iOS-加载数据的实现-MJRefresh
使用CocoaPods加载三方库: pod 'MJRefresh' MJRefresh类结构图: 具体实现方法和效果图: The drop-down refresh 01-Default self.t ...
- COGS 1191. [Tyvj Feb11] 猫咪的进化
★ 输入文件:neko.in 输出文件:neko.out 简单对比时间限制:1 s 内存限制:128 MB [背景] 对于一只猫咪来说,它是有九条命的.但是并不是所有的猫咪都是这样,只 ...
- happy2018暑期集训课后习题001
根据需求补全下面的代码: 需求: 每行输入三个整数a.b.c,根据a的值不同对b和c进行不同的操作: a为0时,计算b+c a为1时,计算b-c a为2时,计算b*c a为3时,计算b/c 并输出操作 ...
- SAP云平台CloudFoundry中的用户自定义变量
CloudFoundry应用的manifest.xml里的env区域,允许用户自定义变量,如下图5个变量所示. 使用cf push部署到CloudFoundry之后,在SAP Cloud Platfo ...
- 数组的reduce方法的应用
var values = [1,2,3,4,5] var sum = values.reduce(function(pre,cur,index,array){ return pre + cur }) ...
- python剑指offer剪绳子
题目 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少 ...
- javaweb基础(34)_jdbc处理mysql大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- 【luogu P1983 车站分级】 题解
题目链接:https://www.luogu.org/problemnew/show/P1983 符合了NOIP命题的特点,知识点不难,思维量是有的. step1:把题读进去,理解.得到 非停靠点的等 ...
- 在Drupal7中创建web接口
Services 模块允许您从一个主要模块后端配置和管理区域启用您 Drupal 站点上自定义构建的内容服务器和服务.该模块中包含的服务允许您调用内容,从 Drupal 的默认和分配的 File.Co ...