Java技术中的三大特性

为什么80%的码农都做不了架构师?>>>   hot3.png

1.虚拟机                                                                        

Java虚拟机JVMJava 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程序都运行在虚拟机上. 

Java源程序(*.java文件)

Java类文件(*.class文件)

编译

平台无关

平台相关

Java虚拟机

被装载进入虚拟机

Linux

Windows

Unix

解释执行字节码文件            

 

2.垃圾回收                                                                     

2.1 什么是垃圾

在程序运行的过程中,存在被分配了的内存块不再被需要的情况,那么这些内存块对程序来讲就是垃圾。

产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资源,回收回来,加以再利用,从而节省资源,提高系统性能。

 

2.2 垃圾回收

-         不再需要的已分配内存应取消分配(释放内存)

-         在其它语言中,取消分配是程序员的责任

-         Java编程语言提供了一种系统级线程以跟踪内存分配

-         垃圾收集

-         可检查和释放不再需要的内存

-         可自动完成上述工作

-         可在JVM实现周期中,产生意想不到的变化

许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(内存指针已溢出范围),程序或运行环境应释放内存。

CC++ 或其它语言中,程序员负责释放内存。有时,这是一件很困难的事情。因为你并不总是事先知道内存应在何时被释放。当在系统中没有能够被分配的内存时,可导致程序瘫痪,这种程序被称作具有内存漏洞。

Java编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在Java技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃)。

 

2.3 提示

1Java里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。比如垃圾回收什么时候开始,什么时候结束,还有到底哪些资源需要回收等,都是程序员不能控制的。

2有一些跟垃圾回收相关的方法,比如:System.gc() , 记住一点,调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。

3程序员可以通过设置对象为null(后面会讲到)来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。

 

3.代码安全                                                                     

Java如何保证编写的代码是安全可靠的呢?

1)第一关:编写的代码首先要被编译成为class文件,如果代码写得有问题,编译期间就会发现,然后提示有编译错误,无法编译通过。

2)第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。

3)第三关:类装载后,在运行前,还会进行字节码校验,以判断你的程序是安全的。

4)第四关:如果你的程序在网络上运行,还有沙箱(Sand Box)的保护,什么是沙箱呢?就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行,是不能够访问本地资源的,从而保证安全性。 

 

Compile

HelloWorld.java

HelloWorld.class

Javac

Network

Class Loader

Java

Byte code verifier

Interpreter

Hardware

Runtime

编译检查

装载检查

字节码校验

Runtime

沙箱保护

http://sishuok.com/forum/blogPost/list/1732.html 

转载于:https://my.oschina.net/itommy/blog/845468

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab图像增强分段线性函数_图像增强、锐化,利用 PythonOpenCV 来实现 4 种方法!...

图像增强目的使得模糊图片变得更加清晰、图片模糊的原因是因为像素灰度差值变化不大,图片各区域产生视觉效果似乎都是一样的, 没有较为突出的地方,看起来不清晰的感觉解决这个问题的最直接简单办法,放大像素灰度值差值、使图像中的…

python多人聊天室_Python基于Socket实现简易多人聊天室

前言套接字(Sockets)是双向通信信道的端点。 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器。套接字可以通过多种不同的通道类型实现:Unix域套接字&…

计算机考研保护一志愿,考研良心大学,保护一志愿的考研名校!

大家好,我是,今天胖胖要跟大家送一些重要的干货,就是对于选学校的小伙伴来说也好,或者是即将要参加研究生复试的小伙伴们来好胖胖在这里要跟大家说一个关于考研白名单的事情,因为大家都知道考研是会分黑名单和白名单&a…

python变量输出到文件_使用函数将多个变量写入文件

首先,要获得当前正在执行的脚本名,或者更确切地说是调用函数的模块,必须从堆栈跟踪中获取它。globals()-它将在writeToValues()函数的相同上下文中执行,因此它不会从“调用者”接收globals()。要纠正这种情况,您可以使…

嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤

在嵌入式系统移植中重要的一部分是操作系统的移植,与其它操作系统相比,Linux大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用、修改、和扩展它。正是由于这一特色,嵌入式系统移植过程中Linux系统受到越来越多人…

sdn框架的计算机网络管理,清华SDN实践--SDN 系统架构与数据中心应用

清华大学在SDN 的系统架构以及其在数据中心网络中的应用方面展开了深入研究,主要研究成果包括:1. 以数据为中心的软件定义网络架构 SODA(Software Defined Data Centric Networking)。与 OpenFlow 相比,SODA 大大增强了数据层面的处理能力&am…

《软件工程》课之-调查问卷的心得体会

1.这次调查是艰辛的。 2.很多人都误以为我在发小广告。。 3.很多人都不认识俄罗斯方块1010这个游戏。 4.大家对于游戏的见解千奇百怪。 5.题目出的不是很完美,下次改进。。 6.简单分析下结果,男孩子都喜欢多人的游戏,女孩的喜欢的多种多样&am…

python循环语句for求和_for循环简介

## for循环简介for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次)。for循环的基本结构如下:![](https://img.kancloud.cn/75/33/753371a9536ed9eeb159074482ec85f0_558x174.png)说明&…

华为备份历史版本_华为手机NAS备份时提示“需处于同一局域网”的解决方法

本内容来源于什么值得买APP,观点仅代表作者本人 |作者:噩梦飘雷创作立场声明:在使用华为手机向群晖NAS中备份时发现一直无法成功,经过一番研究找到了解决方案,希望能帮到大家~前言最近看了一位老哥的帖子&a…

计算机系统集成难点,企业MES实施中存在的难点及建议

MES是企业生产管理服务的核心信息化系统。实施MES是为了将现代企业生产管理思想、理念引入企业生产管理,对企业生产管理流程进行重组和优化,促进企业生产管理水平的提高。可是作用如此大的MES系统在实施过程中能一路无阻吗?MES系统的作用1.车…

【原创】自己编写的JavaGUI一键生成(hibernate/spring/mvc/maven)工具(附带视频教程源码)...

为什么80%的码农都做不了架构师?>>> 带项目源码(https://git.oschina.net/qsyan/GeneratorFx) app下载地址(附带视频教程):http://download.csdn.net/detail/juyan2008/9769406 注明:此应用采用javafx编写…

2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165203 《信息安全系统设计基础》第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名]选项参数表 参数对应功能-E仅执行编译预处理-S将.c代码转换为汇编语言代码-c仅执行编译操作,不进行连接操作-o指定生成的输出文件-I (大写)指定…

普通计算机怎么算根号_大学专业介绍 | 计算机专业的真实就业情况

前两天给大家简单介绍了近些年比较火的计算机类相关专业具体都有哪些不同,以及就业时的行业或者岗位的侧重点。今天呢我们继续这个话题,来聊一聊整个计算机相关专业在学习和就业过程中大概是什么样子的,希望能够给大家提供一些实实在在的参考…

设计模式总结篇系列:工厂方法模式(Factory Method)

工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建。一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建。 根据具体产生类对象的方法定义形式,又可以将其分为普通工厂方法模式、多个工厂方法模式和静态工…

高新园区到大连计算机学校,大连高新区中心小学

大连市高新区中心小学简介:大连市高新区中心小学始建于2009年9月,是大连高新技术产业园区筹建的第一所直属公办学校。学校现拥有2000多名学生,87名教职员工。学校确定了“办诗韵教育,让每个孩子都幸福的教育理念”,通过…

java基础之匿名内部类

内部类:   概述: 类里边还有一个类, 里边那个类叫内部类, 外边那个类叫外部类.   分类:  成员内部类: 定义在成员位置的内部类.  局部内部类: 定义在局部位置的内部类. 格式:   new 类名或者接口名(){     //重写类或者接口中 所有的 抽象方法;   };本质:  就…

0限流电阻 stm32_上/下拉电阻

除了前一节讨论的拉电阻基本使用方法外,上拉电阻也可以提升高电平的电压阈值,以便于前后级信号相匹配,比如,TTL逻辑电平驱动CMOS逻辑电平时,我们通常会添加一个上拉电阻R1,如下图所示:But Why&a…

天地与我并存/万物与我为一 2

http://blog.sina.com.cn/s/blog_17e792e010102y4lu.html 庖丁解牛 先秦:庄周 吾生也有涯,而知也无涯 。以有涯随无涯,殆已!已而为知者,殆而已矣!为善无近名,为恶无近刑。缘督以为经&#xff0c…

网段和子网的区别_电焊石笼网与普通石笼网区别

对于石笼网,每个人都会想到在河中,桥梁附近和大坝上充满石头的笼子结构。今天,我们谈论的是石笼网的一种电焊石笼网,它也是一种常见的石笼网,也被称为六边形石笼网。其功能与石笼网相同,但用法与普通石笼网…

jquery $(document).ready() 与window.onload的区别

转载博客:http://www.jb51.net/article/21628.htm Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的。 1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后…