java内存区域及静态常量池、运行时常量池介绍

java内存区域介绍

我们先来介绍下虚拟机运行时数据区的结构:

我们项目中的每一个线程在运行时,都会有拥有自己独立的栈数据和程序计数器。程序计数器可以看作字节码命令的指示器,记录了下个需要执行的字节码指令,栈数据主要分为本地方法栈和java虚拟机栈。java虚拟机栈就是用来处理我们程序中代码生成的字节码的。

我们程序中的每个方法在执行时都会被分配给一个虚拟机栈帧,栈帧中包含局部变量表和操作数栈以及返回地址等,用来执行该方法生成的字节码。我们的java程序在编译期间编译器会自动帮我们添加一个默认参数,这个参数就是该方法所属类的引用,也就是我们开发中经常会用的this。this持有方法区中类对象的引用(注意类对象是被放在方法区的,而其他对象都是放在堆中的)。类对象中包含了类的基本信息,包括全限定名、简单名、字段列表、方法列表等等,而这些属性的值全部都被保存在常量池中。常量池又可以分为静态常量池和运行时常量池,接下来我们介绍常量池。

静态常量池和运行时常量池介绍

我们的java程序在编写完成时是以java文件的形式存在的,在完成编译后变成了class文件。如果大家比较了解class文件的话,应该会知道class文件中最重要的是常量池,类的所有属性,包括字段名、方法名等等的值都存储在class文件的常量池中,这里的常量池就是我们所说的静态常量池。这时类属性对class文件常量池中值的引用被称为符号引用,因为这时常量池中的值仍然仅仅是符号,不是具体的内存地址。符号引用到内存地址引用的转换要到运行期才会发生,所以我们称java程序是动态链接的。

当我们class文件被加载到内存中时,内存中同样存在一个常量池,这个常量池我们通常称为运行时常量池。但是这里的运行时常量池仅仅是一个泛称,而并不是说有这么一个大池子,实际上运行时常量池是字符串常量池、数字类型常量池等数据结构的统称。这里我们以字符串常量池举个?来说明静态常量池到运行时常量池的转变过程。虚拟机在将class文件加载到内存的过程中会先到class文件的常量池中寻找字符串类型的常量数据,找到后到内存中的运行时字符串常量池中寻找是否有相同的字符,若没有就在堆中创建一个字符串对象,并且在字符串常量池添加这个字符串的引用,同时也会将class中所有原本的引用全部都改成新的引用。字符串常量的使用能够大幅度的提升对象的利用率,减少程序中不必要的开销。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

狗窝里的小日子- 6 ...

来,把平时作的菜菜整理下: 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.

数据库常见面试题总结

参考如下: 数据库常见面试题(开发者篇) 数据库优化 SQL数据库面试题及答案 常见面试题整理--数据库篇转载于:https://www.cnblogs.com/threetop/p/9425172.html

狗窝里的小日子- 7 ...

来,把平时作的菜菜整理下: 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.

[转]CNN目标检测(一):Faster RCNN详解

https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgirshick/py-faster-rcnn Faster RCNN paper : https://arxiv.org/abs/1506.01497 Bound box regression详解 : http://download.csdn.net/download/zy1034092330/9940097…

狗窝里的小日子- 8 ...

来,把平时作的菜菜整理下: 81. 82. 83. 84. 85. 86. 87. 88.

【模式识别与机器学习】——3.9势函数法:一种确定性的非线性分类方法

目的 用势函数的概念来确定判别函数和划分类别界面。 基本思想 假设要划分属于两种类别ω1和ω2的模式样本,这些样本可看成是分布在n维模式空间中的点xk。 把属于ω1的点比拟为某种能源点,在点上,电位达到峰值。 随着与该点距离的增大&a…

超详细 - SVN下载安装及使用教程

SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。 Subversion是什么? 它是一…

docker 中不能用vim编辑文件

2019独角兽企业重金招聘Python工程师标准>>> docker 中不能用vim编辑文件 2017年08月28日 16:54:29 阅读数:2061 更新来源 apt-get update 1安装vim apt-get install -y vim 转载于:https://my.oschina.net/u/3367404/blog/1923901

洛谷 2759 奇怪的函数

【题解】 取个对数然后二分即可。对于一个数x&#xff0c;x^x的位数就是(int)(lg(x)*x1). 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<cmath>5 #define LL long long6 #define rg register7 #define N 2000108 using name…

IPv6 解说 ,与IPv4的同异

见&#xff1a;https://baike.baidu.com/item/IPv6/172297 IPv6 IPv6是Internet Protocol Version 6的缩写&#xff0c;其中Internet Protocol译为“互联网协议”。IPv6是IETF&#xff08;互联网工程任务组&#xff0c;Internet Engineering Task Force&#xff09;设计的用于替…

个推应用统计产品(个数)Android集成实践

2019独角兽企业重金招聘Python工程师标准>>> 前段时间&#xff0c;我们公司的产品又双叒叕给我们提了新需求&#xff0c;要求我们把APP相关的数据统计分析一下&#xff0c;这些指标包括但不限于应用每日的新增、活跃、留存率等等&#xff0c;最好每天都能提供数据报…

JVM对象占用内存计算

大家都知道&#xff0c;jvm中对象实例存储在堆中&#xff0c;对象的引用存储在栈中&#xff0c;而对象的元数据(类型数据)存储在方法区。在我们进行内存优化的过程中经常需要了解每个对象占用的内存大小。接下来我将介绍对象占用内存大小的计算方式。 Java的对象模型 java是面…

MyEclipse 皮肤、主题、背景色

第一步&#xff1a;打开myeclipse--->help--->install from site--->Add将路径粘贴在这里。等待安装颜色主题。https://raw.github.com/guari/eclipse-ui-theme/master/com.github.eclipseuitheme.themes.updatesite 第二步&#xff1a;http://eclipsecolorthemes.org…

RPC 远程过程调用协议

RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 RPC协议假定某些传输协议的存在&#xff0c;如TCP或UDP&#xff0c;为通信程序之间携…

SOA (面向服务的架构)

见&#xff1a;https://baike.baidu.com/item/SOA/2140650?fraladdin UDDI 解说参见&#xff1a;UDDI是什么 SOAP解说参见&#xff1a; SOAP:简单对象访问协议 面向服务的架构&#xff08;SOA&#xff09;是一个组件模型&#xff0c;它将应用程序的不同功能单元&#xff08;称…

[cerc2012][Gym100624B]20181013

转载于:https://www.cnblogs.com/KonjakJuruo/p/9809637.html

Nginx服务器证书部署-亚洲诚信

Nginx服务器证书部署发布时间&#xff1a;2018-01-17 16:15:25依赖建议l SSL卸载驱动。建议&#xff1a;openssl版本1.1.0f。l nginx版本Stable version&#xff1a;最新稳定版&#xff0c;生产环境上建议使用的版本。获取证书MPKI方式&#xff1a;1. 登录https://mpki.tru…

用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard

『cs231n』卷积神经网络的可视化与进一步理解 深度学习小白——卷积神经网络可视化&#xff08;二&#xff09; TensorBoard--TensorFlow可视化 原文地址&#xff1a;http://blog.csdn.net/hjimce/article/details/50544370 作者&#xff1a;hjimce 一、相关理论 本篇博文主要讲…

不怕烧钱怕翻车:雷军与马化腾现场“过招”

说起微信&#xff0c;很多时尚潮人都很熟悉。这款软件可以发送语音信息、可以在有无线网络的地方免费发送、甚至只需摇一摇就能找到在你附近的用户&#xff0c;这些方便、时尚、新颖的元素使微信受到了很多用户的喜爱&#xff0c;也夺得了大量的市场。其实&#xff0c;在微信发…

Thread.yield()和Thread.sleep(0)

关于Thread.yield()和Thread.sleep(0)的语义问题真是一个让人挠头的问题&#xff0c;翻了好多资料&#xff0c;在java6语言规范中看到了一段这样的描述&#xff1a; 重点在红框中&#xff0c;简而言之就是&#xff1a;sleep(0)和yield()的实现不需要任何可见的效果。那么在实现…