Java基础11
Java基础11
DouDouLee 发表于2年前
Java基础11
  • 发表于 2年前
  • 阅读 23
  • 收藏 3
  • 点赞 2
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: Java的平台独立性、JVM加载class文件、GC(Garbage Collection)、内存泄漏、堆和栈

1、Java是平台独立性语言

平台独立性是指可以在一个平台上编写和编译程序,而在其他平台上运行。保证Java具有平台独立性的机制为“中间码”和“Java虚拟机(Java Virtual Machine)”。Java程序编译后不是生成能在硬件平台上可执行的代码而是生成“中间码”。不同硬件平台上会安装不同的JVM,由JVM负责把“中间码”翻译成硬件平台能执行的代码,因此能看出JVM不是平台独立的,是与硬件平台相关的。

解释执行分三步进行:代码的装入、代码的校验和代码的执行,装入代码的工作由“类加载器”完成,装入的代码由字节码校验器进行检查。

Java字节码的执行分两种方式:

1)解释执行指解释器通过每次解释执行一小段代码来完成Java字节码程序的所有操作。

2)即时编译方式,解释器现将字节码编译成机器码,再执行该机器码。

Java平台

包含两个模块:JVM和Java API。JVM是一个虚构出来的计算机,用来把Java编译成的中间代码转换为机器可以识别的编码并运行。有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统,它屏蔽了与具体OS相关的信息,使Java程序只需生成在JVM上运行的目标代码(即字节码)就可以在多种平台上顺利运行。每当一个java程序运行时,都会有一个对应的JVM实例。当程序运行结束后,这个JVM才会退出。JVM实例通过调用类的main()方法来启动一个Java程序。

2、GC(Garbage Collection)垃圾回收

自动检测对象的作用域,把不再使用的存储空间释放掉。垃圾回收器需要完成三个任务:分配内存、确保被引用对象的内存不被错误的回收、回收不再被引用的对象的内存空间。

垃圾回收器使用有向图来记录和管理堆内存中的所有对象,通过有向图来识别哪些对象是“可达的(有引用变量引用它)”,哪些是不可达的。

3、内存泄漏

Java中的内存泄漏主要指一个不再被程序使用的对象或变量还在内存中占有存储空间。

引起内存泄漏的几个原因:

1)静态集合类,如HashMap和Vector,若为static,他们的生命周期与程序一致,那么容器中的对象在程序结束之前不能被释放

2)各种连接,如数据库连接、网络连接、IO连接等,只有连接被关闭后才会回收,若不显式的关闭会造成对象无法被回收。

3)监听器,在释放对象的时候往往没有删除相应的见同期

4)变量的不合理作用域,变量的作用域大于其使用范围,还有未及时的将对象置为null

4、Java中的堆和栈

都是存放数据的地方。栈内存主要存放基本数据类型和引用变量;堆内存存放运行时创建的对象

A a = new A();//a放在栈中, new A()放在堆中

 

共有 人打赏支持
粉丝 6
博文 91
码字总数 45242
×
DouDouLee
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: