您的位置:首页 > 编程语言 > Java开发

java 一点浅薄的东西 分享1

2016-01-01 12:02 302 查看
java里面确实是有一些东西使我们正确理解和掌握android必须要掌握的基础

java程序运行机制

.java文件编译成平台无关的字节码.class文件。编译后的.class文件并不可直接执行,必须要有java解释器来解释执行。所以,java程序执行过程经过2个过程:编译,解释。

而解释这一步则牵扯出我们的JVM虚拟机。JVM就是负责class文件的解释。不同平台上的JVM是不同的,但他们提供的接口是一样的。所以,不同的JVM使相同的class(编译后的字节码文件/程序)可以在不同的平台上使用。所以,这就是他们说的java可以跨平台的原因。

JRE JVM

为什么要把这两个放在一起说,因为这是你必须清楚的一个基础。

JRE java运行环境。可是我们上面也说道,java程序的解释步骤(即运行) 是JVM。这到底是怎么一个关系呢?

其实就是JVM是运行java程序的核心虚拟机,可运行java虚拟机不仅仅只需要虚拟机,其实他还会需要一些其他支持。

比如大量的基础类库。而这些支持JRE中就有,而且JRE中也包括JVM。所以JRE才是一个完整的java程序运行时的环境。

java内存相关知识

简单说出核心的知识点吧:java内存指的是堆内存和栈内存。java对内存的控制(分配和回收)是由JRE在后台自动进行的。我们并不能去控制他的回收,那这种垃圾内存多了就会影响我们系统的运行。怎么解决呢?这时候垃圾回收机制这么一个问题就会被拿出来了

首先,垃圾回收机制回收的是无用对象的内存空间,一般来说就是堆内存里面的内存空间。对于其他如数据库连接,磁盘I/O,他是不会进行回收的,所以我们android的时候程序中会有cursor close,I/O口的close。

然后,上面一段话,可能会有疑问的是,为什么就是堆内存里面的空间呢?其实这里你就可以百度查询了,我也可以简单说下我的理解:

程序运行时,方法里面的局部变量会放入栈,栈里面的局部变量会被回收,堆里面的对象还是存在的。

那么什么才是无用对象呢,垃圾回收机制是如何判断的呢?

你new出来的对象没有引用指向他

A a=new A();

a=null;

在堆中的具体的A的对象就会被回收了

那是不是a=null之后,就立即回收了呢,不是,这不是我们决定的。他是垃圾回收机制本身决定的。那我们a=null的作用其实就是暗示垃圾回收机制可以回收该对象。但是我们可以通过Ru中,实例化的对象这些具体的new出来的就会放入堆。再进一步,就是堆内存里面放的就是运行时的数据区。方法结束了ntime的gc方法建议系统进行垃圾回收,也仅仅是建议。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: