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方法建议系统进行垃圾回收,也仅仅是建议。
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方法建议系统进行垃圾回收,也仅仅是建议。
相关文章推荐
- Java 8 Lambda表达式
- java:文件Filter
- 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
- Java读书笔记(1)-异常处理
- Spring Batch入门教程及其框架搭建
- 2016/1/1 运算符 笔记整理 接2015/12/30 Java 语法
- Spring不能注入Static变量的原因及Spring注入静态变量
- Eclipse搭建android环境及Genymotion模拟器安装问题解决方法
- Java在制作jar包时引用第三方jar包的方法
- Java对象的硬、软、弱和虚引用
- android eclipse 环境搭建
- Eclipse启动时出现错误 An internal error occurred during: “Updating indexes”
- 导致MyEclipse内存不足的原因分析及解决办法
- JAVA关于This的用法
- java interface 中定义的class 是否是static 的验证
- java装饰模式
- MyEclipse和Eclipse区别与联系
- Java 48个关键字
- spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
- Java 模拟队列(一般队列、双端队列、优先级队列)