从helloworld来看java中堆,栈和方法区的区别

Java面试题---String s = new String("HelloWorld")和String s2 = "HelloWorld"有区别么? String s = new String(“HelloWorld”)和String s2 = "HelloWorld"由区别么? 答: 有。 前者在使用的时候创建了两个对象,一个在堆内存中,一个在方法区中的字符串常量池中 而后者在使用的时候创建了两个对象,对象指向的地址和前者一样 代码比较说明 public class Interview { public static void main(S... 阅读详情

从helloworld来看java中堆,栈和方法区的区别  

2017-05-26 16:32:21|  分类: java |  标签:java  helloworld  堆  栈  方法区  |举报|字号 订阅

最近实训,从java基础讲起,向我们介绍了jvm的运行机制,以及java的字节码文件在内存中做了什么,怎么做的。
一、堆、栈与方法区
堆是用于存放对象的,是一个二叉树结构,它为对象开辟属性空间和方法空间,属性空间的大小有属性的数据类型决定,方法空间则默认为四个字节,它存放的是对方法的引用。堆内存在使用完后不会自动释放,java的GC负责对堆内存清理。
栈是方法执行的工作空间,是一个线性结构,它按照线程划分栈帧,用于方法的操作。它会存放局部变量,形参,断点,临时数据,堆空间及方法区空间地址。当执行方法时,就是在栈区开辟空间,方法执行完,空间就自动释放。
方法区分为代码区,静态区和常量池,代码区用来存放字节码文件和共享代码,其中共享代码需要通过对象来访问,它又是与类绑定的。静态区放带有static关键字的数据,大小与数据类型有关,它与类关联。常量池又叫常量缓冲区,它里面放置了-128~127的(integer)整形数据和字符串对象(当你创建一个字符串时,系统会先到字符串池找,有,就把它的地址赋给字符串,没有,就在字符串常量池,创建一个,把地址个字符串)。
从helloworld来看java中堆,栈和方法区的区别 - 530747628 - TNT的博客
 
从helloworld来看java中堆,栈和方法区的区别 - 530747628 - TNT的博客
 
贴上helloworld

public class HelloWorld {
public static void main(String[] args)
{  

String s ;
s = “Hello World!”; //定义字符串s
System.out.println(s);
}
}



了解了堆、栈和方法区,我们通过cmd找到文件路径,javac .java文件,系统会从环境变量找到java配置的path,在java的bin目录找到javac程序,javac会通过程序的main方法让jvm进入编译,对.java。文件进行编译,如无语法语义错误,将java文件编译成字节码文件,而在执行java指令的过程(是解释的过程)中,通过public权限的类(主类),虚拟机找到所有出现的类的class文件(对于系统类库的类,它会去环境变量的classpath下找),将class文件加载到方法区的代码区,static关键字找到主方法,为main方法在栈开辟栈帧,到String[] args,为其在堆区开辟一块空间,空间没有内容。String s是方法内的局部变量,会在方法的工作空间开辟一块内存,为四个字节,初始为垃圾值,用于存放地址。当s="Hello World!"时,jvm会去常量池找有没有"Hello World!",如果没有,把它加入常量池,把它的地址赋予s,有则直接赋予地址。

System.out.println(s);这句语句通过主方法已经将System的字节码文件加载到类代码区,当调用时,会在堆区创建三个对象,
System.in,System.out,System.err,调用in的println()方法,当打印s的时候,s是复写了toString方法的,所有输出的是 "Hello World!"而不是 "Hello World!"的地址。

这样就简单的分析完了java虚拟机运行helloworld的过程。

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样 实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制! 阅读详情

相关推荐

【SAP】ABAP——ALV显示后选择数据操作

在ALV显示后,可全选、全不选或者选择几条数据进行发邮件、更新、下单等等操作。 在user_command中的实现方式如下: 方式一: FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA: lt_rows TYPE lvc_t_row WITH

Mona_1220的博客 4091

java方法在栈执行_详解JVM中堆、栈、方法区(对象、值)是如何调用执行的

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助。先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类...

weixin_42351520的博客 847

STM32 ADC精准采集12V电池电压:从分压电路到软件校准全解析

本文详细解析了STM32 ADC精准采集12V电池电压的全过程,涵盖分压电路设计、电阻选型、ADC配置优化及软件校准方法。针对电池电压监测中的噪声、温漂等挑战,提供了硬件滤波与软件过采样等实战技巧,确保测量精度达到1%以内,满足嵌入式设备对电源管理的严苛要求。

tech5的博客 1013

JVM之方法区与栈

JVM之方法区与栈 一、方法区 所有线程共享 静态变量,常量,类信息(构造方法,接口定义)运行时的常量池也存在方法区中,但是实例变量存在堆内存中,和方法区无关 注意: 方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间; 静态变量、常量、类信息(构造方法、接口定义、普通方法)、运行时的常量池存在方法区中,但是实例变量(普通变量)存在堆内存中,和方法区无关 方法区:绝对不是放方法的地方,他是存储

Daylight629博客 847

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4582

Mamba-ST实战:用状态空间模型实现艺术风格迁移的5个关键步骤

本文详细介绍了如何使用Mamba-ST状态空间模型实现高效的艺术风格迁移,涵盖环境配置、数据预处理、模型架构、训练策略和推理优化等5个关键步骤。Mamba-ST基于SSM(状态空间模型)构建,在保持生成质量的同时显著降低计算复杂度,为风格迁移领域提供了新的解决方案。

weixin_29163581的博客 354

JVM内存结构之堆、栈、方法区以及直接内存、堆和栈区别

JVM内存结构之堆、栈、方法区以及直接内存、堆和栈区别 一、 理解JVM中堆与栈以及方法区 堆(heap):FIFO(队列优先,先进先出);二级缓存;*JVM中只有一个堆区被所有线程所共享;对象和数组储存在里面;调用对象速度较慢;生命周期由虚拟机JVM的垃圾回收机制GC制定;由JVM动态分配空间;堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。...

qq_37432174的博客 2326

HttpClient跳过HTTPS证书验证的3种实战方法(含完整代码示例)

本文详细介绍了HttpClient跳过HTTPS证书验证的3种实战方法,包括自定义TrustManager、SSLContext配置和HttpClientBuilder高级定制,并提供完整代码示例。这些方法适用于开发和测试环境,帮助开发者快速解决自签名证书或未认证证书导致的HTTPS请求失败问题,但需注意生产环境的安全风险。

weixin_29213655的博客 530

堆、栈和方法区存储数据的区别

栈:为即时调用的方法开辟空间,存储局部变量值(基本数据类型),局部变量引用,对象属性的引用。当一段代码或者一个方法调用完毕后,栈中为这段代码所提供的基本数据类型或者对象的引用立即被释放;注意:局部变量必须手动初始化。 堆:存放引用类型的对象,即new出来的对象、数组值、类的非静态成员变量值(基本数据类型)、非静态成员变量引用。其中非静态成员变量在实例化时开辟空间初始化值。(类中属于全局变量的基本...

qq_36470686的博客 2793

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 570

【TC397第23篇】深度解析TC397 EB MCAL开发系列:UART配置与POLL模式数据交互

通过本文,我们深度解析了TC397 EB MCAL开发系列中UART配置的POLL模式下的数据交互。从技术要点的介绍到实际案例的演示,希望读者能够更好地理解UART在POLL模式下的配置与应用。这不仅是对嵌入式系统开发的一次深刻探索,更是为项目提供了一种高效通信的解决方案。在未来的文章中,我们将继续深入研究嵌入式系统开发的各个方面,为广大开发者提供更多实用的技术知识。敬请期待,一同迎接嵌入式技术的新篇章!

一直在水些技术小文 470

JVM学习笔记(二)方法区和栈

方法区,元数据,方法栈,栈帧,栈帧存储的数据,栈帧工作机制,栈溢出异常。栈空间的线程私有验证

slxysyka的博客 702

RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGB

RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGB

J。 2339

初学者基础篇-java

计算机存储单元 字节:数据存储的最小单位 1byte(字节) = 8bit(位) 跨平台性 JVM:Java虚拟机,Java代码都运行在 JVM上 JRE:Java程序运行时的环境,包含JVM和运行时所需要的核心类库 JDK:Java程序开发工具包,包含JRE和开发人员使用的工具 如果只需要运行一个 java程序,只需要安装JRE即可 如果需要开发一个JAVA程序,只需要安装JDK即可 环境变量配置 系统变量里新增一项,修改一项 新增 JAVA_HOME : C:\MyApp\Java\jdk1.8

weixin_42572626的博客 917

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java SE语法快速入门

Java简介 第一个Java程序 下载JDK(Java开发环境) www.oracle.com java oracle java java 8 windows x64 安装JDK 直接下一步,安装时路径尽量不要包含中文 环境变量配置 CLASSPATH:指定class文件所在的目录的 JAVA_HOME:JDK安装的根路径 Path:在Path

zykwblx的博客 349

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

第一个java程序HelloWorld

接上集:java入门教程(一) 转载请注明出处:https://blog.youkuaiyun.com/u014254481/article/details/81943950 一、各类注释:所谓注释,跟我们学习古文时下面的注释作用如出一辙,代码中的注释也是帮我们理解代码的含义,在真正的开发中注释要求写的非常详细和清楚,而写注释的习惯要从一开始养成。(如图1) 1.单行注释:只能跟一行注释内容 //注释...

一入代码深似海 11万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Java 虚拟机原理】栈帧 | 动态链接 | 方法区 | 字节码文件二进制分析

前言、 一、方法区、 二、字节码二进制文件分析、 三、动态链接、 1、动态链接简介、 2、静态链接与动态链接、 3、早期绑定 和 晚期绑定、 4、动态链接示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1452

关于JAVA程序的内存分布

java运行时内存分布

hsy12342611的专栏 464

python和java的本质区别,python和java有什么关系

大家好,给大家分享一下python和java的本质区别,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

2301_79533350的博客 817

【java基础02:第一个java程序】HelloWorld public class 和class的区别 java的加载与运行原理 println和print的区别

java的语言特性 简单性 在JAVA中,真正操作内存的是JVM(JAVA虚拟机)(C++语言写的一个虚拟机) 所有的java程序都是运行在java虚拟机当中的。 而java虚拟机执行过程中再去操作内存 对于C或者C++来说,程序员都是可以直接通过指针操作内存的 C或者C++更灵活,可以直接程序员操作内存,但是要求程序员技术精湛。C语言或C++更有驾驭感 java语言屏蔽了指针概念,程序员不能直接指针操作,或者说程序员不能直接操作内存。这种方式也有缺点: ​ ...

博客 945

Java开发入门:从环境搭建到第一个HelloWorld程序

本文介绍了Java开发入门的基础知识,包括Java语言概述、开发环境搭建和第一个HelloWorld程序。主要内容涵盖:Java的核心特性(跨平台性、面向对象等)和应用场景;JDK 8的下载安装与环境变量配置(PATH和CLASSPATH的区别);以及Java程序的编写、编译和运行流程。重点讲解了Java跨平台原理(JVM的作用)和开发环境验证方法,帮助初学者快速掌握Java开发基础。

编程世界如山海,探索不止。 1万+

python和java的本质区别,python和java的主要区别

大家好,小编来为大家解答以下问题,python和java的本质区别,python和java的主要区别,现在让我们一起来看看吧!

Clt216的博客 873

JAVA编写HelloWorld

一个Java源文件当中定义公开的类的话,只有一个,且该类名称必须和Java源文件名称一致。一个Java源文件当中public的class不是必须的。一个class会定义生成一个xxx.class字节码文件。一个Java源文件当中可以定义多个class。...

qq_45734913的博客 2751

helloworld 知道 java_当你写java helloworld时候,背后到底发生什么?

每一个主要学过写代码的人,都知道helloworld是做什么的。而不同的程序与眼中的Helloworld深度和层次是不一样的,这篇文章让我们更加深度的解读一下java的helloworld背后的故事。为什么java的所有代码都是在类中?java的设计逻辑就是基于类来开发,所以所有的方法和类函数都是基于类来弹的。这和c++这门是有本质的区别的。一定程度上,这样的设计让JAVA面向对象的底蕴更加浓厚,...

weixin_39926014的博客 147

Java特性和优势与HelloWorld的详解

一、JAVA特性和优势 简单性 面向对象(万物皆可对象) 可移植性(可在mac,win,liunx系统里来回运用) Write once,Run Any where 高性能 分布式 动态性 多线程(可以同时进行多个程序) 安全性 健壮性 二、Java的三个版本 JavaSE:标准版(基础和核心)主要是桌面程序、控制台开发。。 JavaME:嵌入式开发(手机。。)不经常用 JavaEE:企业级的开发(Web端口,服务器开发。。) 三、JDK,JRE,JVM区别 JD

m0_53911555的博客 289

python和java有什么关系,python与java有什么区别

这篇文章主要介绍了python和java的区别及应用领域,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

2301_81900386的博客 940
上一篇: 浅谈JVM-图解类加载机制
下一篇: Java-线程池专题 (美团面试题)
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值