1.虚拟机 Java虚拟机JVM(Java Virtual Machine)在Java编程里面具有非常重要的地位,约相当于前面学到的Java运行环境,虚拟机的基本功能如下: (1):通过ClassLoader寻找和装载class文件 (2):解释字节码成为指令并执行,提供class文件的运行环境 (3):进行运行期间垃圾回收 (4):提供与硬件交互的平台 Java虚拟机是在真实机器中用软件模拟实现的一种想象机器。Java虚拟机代码被存储在 .class文件中;每个文件都包含最多一个public类。Java 虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范,该规范使Java 软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做。这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现。编译器在获取Java应用程序的源代码后,将其生成字节码,它是为JVM生成的一种机器码指令。每个Java解释器,不管它是Java技术开发工具,还是可运行applets 的Web浏览器,都可执行JVM。 JVM为下列各项做出了定义 - 指令集(相当于中央处理器[CPU] ) - 寄存器 - 类文件格式 - 栈 - 垃圾收集堆 - 存储区 JVM的代码格式由紧缩有效的字节码构成。由JVM字节码编写的程序必须保持适当的类型约束。大部分类型检查是在编译时完成。任何从属的Java技术解释器必须能够运行任何含有类文件的程序,这些类文件应符合Java虚拟机规范中所指定的类文件格式。
1.1 虚拟机是Java平台无关的保障 正是因为有虚拟机这个中间层,Java才能够实现与平台无关。虚拟机就好比是一个Java运行的基本平台,所有的Java程序都运行在虚拟机上.
2.垃圾回收 2.1 什么是垃圾 在程序运行的过程中,存在被分配了的内存块不再被需要的情况,那么这些内存块对程序来讲就是垃圾。 产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资源,回收回来,加以再利用,从而节省资源,提高系统性能。
2.2 垃圾回收 - 不再需要的已分配内存应取消分配(释放内存) - 在其它语言中,取消分配是程序员的责任 - Java编程语言提供了一种系统级线程以跟踪内存分配 - 垃圾收集 - 可检查和释放不再需要的内存 - 可自动完成上述工作 - 可在JVM实现周期中,产生意想不到的变化 许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(内存指针已溢出范围),程序或运行环境应释放内存。 在C,C++ 或其它语言中,程序员负责释放内存。有时,这是一件很困难的事情。因为你并不总是事先知道内存应在何时被释放。当在系统中没有能够被分配的内存时,可导致程序瘫痪,这种程序被称作具有内存漏洞。 Java编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在Java技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃)。
2.3 提示 (1)在Java里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。比如垃圾回收什么时候开始,什么时候结束,还有到底哪些资源需要回收等,都是程序员不能控制的。 (2)有一些跟垃圾回收相关的方法,比如:System.gc() , 记住一点,调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。 (3)程序员可以通过设置对象为null(后面会讲到)来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。
3.代码安全 Java如何保证编写的代码是安全可靠的呢? (1)第一关:编写的代码首先要被编译成为class文件,如果代码写得有问题,编译期间就会发现,然后提示有编译错误,无法编译通过。 (2)第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。 (3)第三关:类装载后,在运行前,还会进行字节码校验,以判断你的程序是安全的。 (4)第四关:如果你的程序在网络上运行,还有沙箱(Sand Box)的保护,什么是沙箱呢?就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行,是不能够访问本地资源的,从而保证安全性。
|
- 浏览: 180716 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (215)
- Java Base (42)
- Java Web (15)
- Struts 1 (2)
- Struts 2 (4)
- Hibernate (14)
- Spring (18)
- Mybatis (2)
- SpringMVC (12)
- HTML/CSS (3)
- JS (13)
- jQuery (2)
- jQuery UI (0)
- DB/SQL (4)
- MySQL (15)
- Oracle (3)
- Linux (0)
- OS (4)
- Design Patterns (3)
- thk in pro (5)
- Interview (10)
- IT Base (3)
- Tomcat (1)
- 数据结构 (8)
- Java Tools (4)
- SiteMech (1)
- Apache Tools (5)
- DWR (1)
- Maven (4)
- Git (2)
- Zookeeper (2)
- ActiveMQ (3)
- Dubbo (0)
- Groovy (6)
- IDE (3)
- Redis (0)
- Guava (2)
最新评论
-
就叫这个名字吧:
写的非常好,受教了。
JAVA中Stack和Heap的区别
发表评论
-
Java 对象转化为Map
2017-01-25 09:37 1267下面将会使用内省和反射机制来实现JavaBean转化为Ma ... -
Java 编写过滤手机号码或者固定电话的工具类
2017-01-25 09:33 1526以下是分享自己编写的用于过滤手机号码、固定电话、黑名单的工 ... -
Java关于线程池的使用
2017-01-13 12:16 888一、四种线程池创建的方式 Java通过Executors ... -
Java中HashMap与ConcurrentHashMap的区别
2016-06-22 17:41 4861从JDK1.2起,就有了HashMap,正如前一篇文章所说 ... -
Java7中的try-with-resources
2016-06-22 17:37 529首先,我们看下面的代码。 BufferedReader ... -
java中比较两个日期Date的大小
2016-06-13 15:21 5513第一种方式: import java.text.DateF ... -
java、javaw和javaws的区别
2016-05-28 11:52 1017java、javaw和javaws的区别: 首先,所有的 ... -
Java中的网络编程
2016-05-28 08:55 749一、网络通讯方式 在现有的网络中,网络通讯的方式主 ... -
Java中的动态代理(jdk和cglib)
2016-05-22 20:51 515JAVA的动态代理 代理模式 代理模式是常用的java ... -
HashSet、LinkedHashSet、TreeSet的区别
2016-05-22 17:13 915HashSet:哈希表是通过使用称为散列法的机制来存储信息的 ... -
Java中的HashMap的2种遍历方式比较
2016-05-19 23:36 647首先我们准备数据,准备一个map Map<Stri ... -
JVM中类加载器的父委托机制
2016-05-19 23:25 606类加载器 类加载器用来把类加载到Java虚拟机中。 ... -
Java的HashMap和HashTable
2016-05-19 23:21 7141. HashMap 1) hashmap的数据结 ... -
java中多种方式解析xml
2016-05-02 09:04 684第一种:DOM。DOM的全称是Document Object ... -
cmd中java的编译命令——java和javac、javap
2016-04-30 09:35 2253最近重新复习了一下 ... -
Java中locks与synchronized及其异同
2016-04-27 21:11 492关键字:synchronized、java.util.co ... -
Java中synchronized 修饰在static方法和非static方法的区别
2016-04-27 21:05 1245【问题描述】关于Java中synchronized 用在实 ... -
Java中的断言(assert)
2016-04-27 20:59 694一、语法形式: ... -
Java中String、StringBuffer、StringBuilder的区别
2016-04-23 21:28 618java中String、StringBuffer ... -
JAVA的整型与字符串相互转换
2016-04-09 08:26 6191.如何将字串 String 转换成整数 int? ...
相关推荐
此为英文版本,非中文版本,带目录。 伴随着Java的成长,《Java核心技术》从第1版到第11版一路走来,得到了广大Java程序设计人员的青睐,...美国圣何塞州立大学计算机科学系教授、Java技术的坚定倡导者、国际计算机协会
《JAVA核心技术卷2:高级特征》是Java技术权威指南,全面覆盖Java...《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性
Java核心技术 卷II 高级特性 第9版(中文) Java核心技术 Java高级特性 Java第9版(中文) Java卷2 Java进阶
面向对象可以说是 Java 最重要的特性。Java 语言的设计完全是面向对象的,它不支持类似 C 语言那样的面向过程的程序设计技术。Java 支持静态和动态风格的代码继承及重用。 本资源是Java软件技术文档合集,里面很细...
《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。 《JAVA核心技术卷2:高级特征》适合软件开发人员、高等院校...
《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。 《JAVA核心技术卷2:高级特征》适合软件开发人员、高等院校...
这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java3D技术强大的扩展性 本文以Java3D为开发平台,利用Java语言强大的网络功能,实现了在网页上对3D动画进行显示和操作。 ...
Java技术由于其跨平台特性,面向对象特性,安全特性等。 J2EE把数据库访问,Java组件和WE哉术等有机地集成在一起,使 之特别适合于各类医学教学机构复杂的大中型应用, 更好支持B/S结 构,保证系统具有很好的可扩展...
java核心技术卷二高级特性,原书第10版,中文扫描版。
JAVA核心技术 高清扫描版
JAVA2核心技术第7版卷2高级特性-中文版 内容简介 本书是java 2技术权威指南,全面覆盖java 2技术的高级主题,包括:多线程、集合框架、网络api、数据库编程、分布式对象等,深入探究了swing、java 2d api、...
在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多...
《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性...
Horstmann的全新力作,以关键的核心技术为着眼点,以全局高度提炼语言精髓,以高浓度、高含金量的方式对Java 8新特性进行细致讲解,将其沉浸于Java多年的真知灼见蕴藏于书中,既扎实覆盖Java编程的基础知识,更...
《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性...
《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性...
Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、...《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性
core Java 11 Edition Java核心技术 卷一和卷二,学习Java必不可少的书籍。
Java核心技术卷Ⅱ高级特性 原书第8版.pdf