一:JVM内存的分析

首先编辑java源文件 *.java,然后调用javac编译器将文件编译成.class字节码文件。

当使用到某个类时,类加载器会将字节码文件加载到内存空间中,然后分配空间,

调用Class类newInstance方法实例对象。

内存中的jvm找到程序中main函数作为入口,然后开始执行。

执行过程中的内存管理

1:寄存器:用来存储指定,例如流程控制语句,下一步应该执行那一条指令语句,就是存储

在寄存器,寄存器的空间很小。

2:栈内存:用来存放主函数中变量、局部变量、引用,主要用来存储基本数据类型的值以及引用

类型的地址,指向堆中的对象,栈的结构遵循先进先出,所以不够灵活。

3:堆内存:用来存放new出来的对象,堆相对栈比较灵活,jvm虚拟机内部维护一个垃圾回收机制,

不向C++那样需要析构函数,必须将对象销毁,垃圾回收机制会定期扫描堆,一旦发现该对象不在

被使用(栈中没有地址执行它),就会把它回收掉,来释放存储空间。

4: 常量池,常量池是从堆内存中分配出来的一小块区域,用来存储经常使用的变量,例如字符串常量,

整形-127~128,如果需要使用,首先会到常量池中寻找,如果常量池中有该对象,直接return,如果没有

创建对象,put进常量池中。

5:数据区(方法区、共享区):data segment 存放静态变量,方法

代码区:code segment:用来存放代码。

二、对于面向对象、类、对象的理解

1.    我们知道面向过程强调的是一系列的动作,面向对象强调是是结果,例如:拿打开冰箱这件事来说,如果我们以面向过程的语言去理解的话:第一步,打开冰箱;第二步;把事物放进去;第三步,把冰箱关上。这就是面向过程,如果我们以面向对象的思想去理解的话,冰箱就是一个对象,他拥有打开,可以存放东西,关闭的方法,我只要用冰箱去调用这些方法就行了。

class Fridge{private String brand; //品牌private double price; //价格//打开void open(){System.out.println("open");}//储存食物void depositFood(){System.out.println("depositFood");}//关闭void close(){System.out.println("close");}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}}

上面是一个冰箱的类,有品牌、价格等属性,还有打开、关闭、存储食物的行为。

public class Person {private String name;private int age;private Fridge fridge;Person(String name,int age,Fridge fridge){this.name=name;this.age=age;this.fridge=fridge;}void cook(){fridge.open();fridge.depositFood();fridge.close();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Fridge getFridge() {return fridge;}public void setFridge(Fridge fridge) {this.fridge = fridge;}}

然后又创建Person这个类,这个类有姓名、年龄以及冰箱的属性,因为人如果想使用冰箱,就必须将冰箱对象注入人中。

如果人要cook,那么就要打开冰箱,拿去食物,然后关闭冰箱。

这就是面向对象的思想,我们眼中只有一个个对象,它的功能实现与我们调用者无关,我们只要使用它们的功能就行了。

举例二:我们打开门,然后进来,把门关上,这是一个过程,而面向对象的思想就是,门是一个对象,拥有打开,关闭的方法,我们只要去调用就行了,至于如何实现,那是门的事情,与我们调用者无关。

2.类与对象,在现实生活中,存在一个个特征鲜明的个体,我们称他们为对象,就是说万事万物都是对象,张三、李四、一只狗,一只猫,它都是与众不同的,如果我们仔细观察事物,会发现,事物之间是存在共性了,张三和李四都是人,都属于人这个类,然后和一只狗之间有都是动物,在往上,和一棵树又都是生物,所以类是一个抽象的概念,它是对一些对象共性的抽取。而对象时现实生活一个个活灵活现的个体。

既然类是很多对象共性的抽取,那么某一类事物肯定又有一些属性,或者行为方式;

举例:人类,有姓名,年龄,国籍,性别,    都吃饭,走路,睡觉,说话,,等等方式,

按照类中的属性和方法对号入座填上数据,那么一个具体的对象就创建出来了

三:几个关键字的用法

1、return  返回值类型和方法指定类型保持一致,这个值总是确定的。

return的另一个作用是结束方法的执行,对于void方法,没有返回值,不用写return,其实在方法的最后默认

会加上return。

2.this 关键字:表面上是区分成员变量和参数名重名的问题,其实this可以看做一个变量,就是当前值的调用,比如讲台上有一把椅子,它就代表this。那个老师来上课,那个老师就坐在那里,而在java中,只要有对象来调用这个函数,那么this,就代表当前调用本函数的对象。

类、对象以及jvm运行内存解析相关推荐

  1. 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!

    前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...

  2. C#之XML解析为类对象

    XML解析为类对象 1.XML示例: <Request><MessageHeader><Sender></Sender><Receiver> ...

  3. memset初始化类对象出错解析

    void *memset(void *s, int v, size_t n); 英文释义如下: Copies the value v (converted to type unsigned char) ...

  4. 对象在JVM中的表示: OOP-Klass模型

    http://blog.csdn.net/linxdcn/article/details/72850375 本人基于上文做了简单的整理,解释及拓展,方便像和我一样不熟悉C++的人能更好的理解原文中的一 ...

  5. 面向对象(类/对象/封装/继承/static/内存类加载)

    >面向对象:万物皆对象: >类和对象: 从代码的角度来说:类是代码的载体. 从逻辑角度来说:类是静态文件:对象是内存中的地址: 形象的来说,类就是一个模具,是用来生产对象的:对象是基于类产 ...

  6. jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析

    目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...

  7. java类对象的内部结构图解(java对象模型精讲)

    目录: java虚拟机汇总 class文件结构分析 1).class文件常量池中的常量项结构 2). 常用的属性表的集合 类加载过程 1).类加载器的原理以及实现 虚拟机结构分析 1).jdk1.7和 ...

  8. 2020 idea 查看内存消耗_查看运行时某个java对象占用JVM大小及通过idea查看java的内存占用情况...

    一.如果想看运行时某个java对象占用JVM内存大小,可以先将对象转换成字节类型,然后计算: List bizGroupRelatedEventInfos = bizEventVersionMappe ...

  9. seata之jvm参数解析

    微信公众号:我其实目前没有耶 我是一个互联网公司的螺丝钉; 魔术师耿 JVM启动参数解析 疑问1 :生产环境上常用哪些JVM参数进行设置; 疑问2 :sh 启动jar 包并配置JVM参数样例怎么写; ...

最新文章

  1. AI一分钟 | 北京开放自动驾驶车辆路测道路105公里;阿里将人工智能引入时尚界...
  2. 阶乘在c语言代码大全,求10000的阶乘(c语言代码实现)
  3. 人工智能的前景:更高智慧的体的诞生
  4. C#泛型编程基础知识总结【转】
  5. 管理新论:少谈精神文化,强调工作作风
  6. 实战SATA硬盘安装64位XP(转)
  7. ServerStatus 云探针部署
  8. 如何批量修改文件名称
  9. 【微信小程序】体验版获取不到接口数据
  10. 论文阅读:MPViT : Multi-Path Vision Transformer for Dense Prediction
  11. 常用的前端还款计算器(包括按月等额本息、按四月等额本息、到期还本付息、到期还本按月付息四种还款方式)
  12. 相比普通XRD,同步辐射原位XRD的优势有哪些?
  13. CWnd和HWND的区别
  14. endl与\n的区别
  15. 从程序员到产品经理再到自己创业的心路历程
  16. SSM+校园社团平台 毕业设计-附源码251554
  17. 北斗星历星钟性能总结
  18. 用Disk Genius检测和修复硬盘坏道
  19. ExecutionException 异常类解析
  20. tensorflow.python.framework.errors_impl.InvalidArgumentError exception str() failed解决办法

热门文章

  1. 《深入react技术栈》学习笔记(一)初入React世界
  2. 为什么 Linux Mint 比 Ubuntu好?
  3. SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II
  4. RabbitMq(十) 消息过期时间TTL介绍以及代码实现
  5. idm 假冒_IDM出现假冒序列号问题解决
  6. 影片模块 Dubbo 服务聚合
  7. golang 面向接口编程
  8. 在CentOS 6上使用yum安装lnmp服务
  9. android 生命周期流程图,Android Studio ——Service的生命周期
  10. 苹果商店上架流程_苹果TF签名是什么?