java final内存机制_Java中的内存处理机制和final、static、final static总结

装载自:http://blog.csdn.net/wqthaha/article/details/20923579

Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。

一个完整的Java程序运行过程会涉及以下内存区域:

寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。

栈:保存局部变量的值,包括:a.用来保存基本数据类型的值;b.保存类的实例,即堆区对象的引用(指针)。也可以用来保存加载方法时的帧。

堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、字段的符号引用(1)。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中。

代码段:用来存放从硬盘上读取的源程序代码。

全局数据段:用来存放static定义的静态成员或全局变量。分配该区时内存全部清0,结果变量的初始化为0。

下图表示内存分配图:

1339378152_2914.jpg

对于java 和内存之间,有如下几点需要注意:

1.一个Java文件,只要有main入口方法,我们就认为这是一个Java程序,可以单独编译运行。

2.无论是普通类型的变量还是引用类型的变量(俗称实例),都可以作为局部变量,他们都可以出现在栈中。只不过普通类型的变量在栈中直接保存它所对应的值,而引用类型的变量保存的是一个指向堆区的指针,通过这个指针,就可以找到这个实例在堆区对应的对象。因此,普通类型变量只在栈区占用一块内存,而引用类型变量要在栈区和堆区各占一块内存。

3.分清什么是实例什么是对象。Class a= new Class();此时a叫实例,而不能说a是对象。实例在栈中,对象在堆中,操作实例实际上是通过实例的指针间接操作对象。多个实例可以指向同一个对象。

4.栈中的数据和堆中的数据销毁并不是同步的。方法一旦结束,栈中的局部变量立即销毁,但是堆中对象不一定销毁。因为可能有其他变量也指向了这个对象,直到栈中没有变量指向堆中的对象时,它才销毁,而且还不是马上销毁,要等垃圾回收扫描时才可以被销毁。

5.以上的栈、堆、代码段、数据段等等都是相对于应用程序而言的。每一个应用程序都对应唯一的一个JVM实例,每一个JVM实例都有自己的内存区域,互不影响。并且这些内存区域是所有线程共享的。这里提到的栈和堆都是整体上的概念,这些堆栈还可以细分。

6 .类的成员变量在不同对象中各不相同,都有自己的存储空间(成员变量在堆中的对象中)。而类的方法却是该类的所有对象共享的,只有一套,对象使用方法的时候方法才被压入栈,方法不使用则不占用内存。

final、static、final static总结

final如果用来表示数据变量的话,通常是指该变量被赋值一次,就不能改变指。

static如果用来表示未创建的对象里的数据变量时,就可以直接在对象里直接使用,通常指静态变量、全局变量(在JAVA中没有全局变量一说)

final static合用表示可以直接调用的数据,不用再去在以创建的类中申明,而且该变量不能后面赋值修改。通常可以与private访问限制一起使用。

原文:http://www.cnblogs.com/w-wfy/p/7215804.html

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

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

相关文章

[vue] vue过渡动画实现的方式有哪些?

[vue] vue过渡动画实现的方式有哪些? 1.使用vue的transition标签结合css样式完成动画 2.利用animate.css结合transition实现动画 3.利用 vue中的钩子函数实现动画个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很…

MySQL中的字符集涵义及使用方法总结(二)

五.乱码的避免最好让上述9个字符集变量值保持一致,或者至少“兼容”,同时也要考虑到OS中locale的值。当然:character_set_system例外,它是存储和表示元信息使用的字符集,一般都是ascii串,使用utf8和使用lat…

vim 多行添加注释,取消注释

转发 已经验证 https://blog.csdn.net/SuiXin_123/article/details/81393397转载于:https://www.cnblogs.com/pingg/p/10509301.html

c java c时间格式处理_c:foreach 对时间类型进行格式化

程序(三)Input parameters:Date: 2004/04/01:13:30:00Java format: Thu Apr 01 13:30:00 CST 2004isoDate: 20040531T235959Java format: Mon May 31 23:59:59 CDT 200DatesTag OutputAttribute: value; required. Tag has no body. 注释:value属性 日期对象200…

[vue] vue父子组件双向绑定的方法有哪些?

[vue] vue父子组件双向绑定的方法有哪些? 1.利用对象的引用关系来实现 2.父子组件之间的数据传递 3.使用.sync修饰符个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通…

调用未知DLL中的导出函数

不知道诸位看官是否有过这样的经历:在不经意之间发现一个DLL文件,它里边有不少有趣的导出函数——但是由于你不知道如何调用这些函数,所以只能大发感慨而又无能为力焉。固然有些知名的DLL可以直接通过搜索引擎来找到它的使用方式(…

Sqlserver内存管理:限制最大占用内存(转载)

https://blog.csdn.net/donghustone/article/details/83338185?tdsourcetags_pcqq_aiomsg 转载于:https://www.cnblogs.com/wangjunwei/p/10510138.html

批处理 java环境_java环境配置简单批处理方法一键OK

Java编程首要工作就是安装JDK(Java Development Kit)。一通NEXT点完安装包后就是最重要的环境变量设置了。也许有人会问为什么要设置环境变量,要理解这点,首先要明白环境变量的作用。环境变量可以简单的理解为路径导向。例如Windows里面的临时文件夹存放…

[vue] vue部署上线前需要做哪些准备工作?

[vue] vue部署上线前需要做哪些准备工作? router 是不是hash 是否需要配置nginx , publicPath , 是不是要配置cdn个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

c#2.0的新特性--泛型

c#2.0中引入了许多新的语言特性:比较重要的有4个,泛型(Generics)、匿名方法(Annorymous Methods)、迭代器(Iterators)、和局部类(Partial Types). 泛型 是c…

构建之法与博客首秀

问题一:软件的安全功能是指什么呢? 我看了《构建之法》第七页对飞机安全功能的的描述,想知道在软件中是否有类似飞机的安全功能?如果有,具体是指什么功能呢?我在查阅资料后只找到对软件安全的的总结(软件安…

java接口import_深入理解Java架构师在组件注册@Import导入容器(ImportSelector接口)的神操作!...

ImportSelector:返回需要导入的组件的全类名数组创建一个实现了ImportSelector接口的类,然后让入Import中。ImportSelector的实现类包含了所有需要导入到容器中的组件。public class StuConfigurationImportSerlect implements ImportSelector {Override…

[vue] 说说你觉得认为的vue开发规范有哪些?

[vue] 说说你觉得认为的vue开发规范有哪些? 风格指南个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

[vue] vue性能的优化的方法有哪些?

[vue] vue性能的优化的方法有哪些? Vue 项目性能优化 — 实践指南(网上最全 / 详细) 前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 D…

JavaScript小技巧一

事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.y 窗…

java builder pool_每周10道Java面试题:String, String Pool, StringBuilder

每周10道 Java 面试题由 ImportNew 整理编译自网络。1. 写出下面代码的运行结果。int src 65536;Integer dst new Integer(65536);System.out.println(src dst);System.out.println(dst.equals(src));答案: true true考点: Integer 的 equals 实现。查…

Transactional cannot be resolved to a type

SpringBoot整合Mybatis时遇到“ Transactional cannot be resolved to a type ” ,以为是没有导入相应的包 “ import org.springframework.transaction.annotation.Transactional; ” ,导入发现还是报错,在Stack Overflow上找到解决办法。在…

[vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的?

[vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的? vue 没用过echarts react到是用过 不过我想应该差不多 ,多注意dom的渲染时机 和chart的实例化时机 在相应的生命周期方法中做操作。结合强制刷新 应该就能解决大部分问题…

终于通过了~

申请博客园的blog真TM费尽,提交了N次申请都没成功,说什么“期待你更详细的申请理由”,我靠,管理还真TMD严格啊。 不过觉得这个blog做的还真不错,而且人也比较多,hoho~。 以后偶会…

将字符串中的字符按Z字形排列,按行输出

示例1: Input: s "PAYPALISHIRING", numRows 3 Output: "PAHNAPLSIIGYIR" 示例2: Python解决方案: def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""…