java内部存储简述

李杰

github: https://github.com/lijie298

1为什么要了解内存结构

在实际项目中,会涉及到很多大量数据的访问,存储或者是计算,这个时候如果可以用合适的容器来存储这些数据,就会达到事半功倍的效果,也就是说,当你的程序遇到瓶颈的时候,你就该考虑考虑底层的东西了。

咱们在这里介绍java的基本数据类型,类,类内成员变量,方法的存储结构,以及使用过程中的内存变化;

java数据类型可以分为两大类型:基本数据类型引用型数据类型

2基本数据类型

java的基本数据类型依占位大小从小到大依次是:

boolbean(1位) byte(8位) char(16位) short(16位) int(32位) float(32位) long(64位) double (64位)

简要说明下 如果要存储为小数,存储类型应该定义为浮点型 (float double )。

3String数据类型

String 是java 里面已经封装好的引用型数据类型,每次初始化一个String类型的变量就会创建一个String 的对象。

4类

类在计算器中的存储 比较复杂,因为一个类里面往往包含多种数据类型,在这里进行具体分析;

在计算器中,当一个类运行起来的时候,jvm虚拟机经过 加载——链接——初始化。其中加载是 把你写的java程序转化成机器编码并加载到jvm虚拟机;链接 主要是对加载到jvm中的编码格式,函数调用等进行测试,用我的个人理解这两步 就像我们日常说的编译;最后是程序的初始化,就是对你程序中的常量,反射机制,子类调用所涉及的进行赋值。

5内存分配方式

程序运行起来后的内存分配主要有 程序计数器,虚拟机栈,本地方法栈,堆,方法区和直接内存。

程序计数器: 用于标记程序运行,利于gc机制; 线程私有。

虚拟机栈 :用于存储局部变量表、操作数栈、动态链表、方法出口;线程私有,就是在程序运行阶段调用方法时,会把信息调用到本区域;

本地方法栈:java程序调用native方法存储位置;

: 用于存储java程序的类的实例,数组;(简单理解就是对应引用数据类型的数据结构);线程共享区域;

方法区:运行时 ,存储被jvm加载过的类信息。

原文发布于微信公众号 - Android机动车(JsAndroidClub)

原文发表时间:2017-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zlmai的专栏

理解PHP的延迟静态绑定

static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名。这个东西可以实现在父类中,能够调用子类的方法和属性。

2162
来自专栏数据结构与算法

1750:全排列

1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所...

37114
来自专栏雪地二货笔记库

vue学习笔记4-计算属性-computed

computed属性的使用方法和method属性的使用方法完全大致相同,只能用于计算上 之前反转写法:

551
来自专栏JadePeng的技术博客

Java 静态代理与动态代理

代理模式 设想你的项目依赖第三方,但是你需要对其接口做一些数据检验、性能数据记录、异常处理等,合适的方法就是使用设计模式里的代理模式。 代理模式是常用的ja...

4315
来自专栏swag code

多线程的实现方法

      从Thread类中实例化的对象即代表线程,启动一个线程就是建立一个Thread实例。因为完成线程真正功能的代码放在类的run()方法中,所以可以将线...

612
来自专栏python成长之路

全局变量和局部变量的理解

1002
来自专栏JAVA技术站

shell学习五常用命令echo printf test

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:

923
来自专栏开发技术

排序之简单选择排序

  本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中...

1102
来自专栏行者常至

010.多线程-线程间通信

安全问题: 当线程在读取资源的过程中,写线程操作了资源, 导致读线程读取的数据,一部分是写之前的数据,一部分是写之后的数据。

1051
来自专栏我是业余自学C/C++的

二维变长数组

1435

扫码关注云+社区

领取腾讯云代金券