字节码

[Java入门笔记] Java语言简介

﹥>﹥吖頭↗ 提交于 2019-12-25 21:29:53
前言 学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中、网上的文章,视频等资料,整理与回顾Java的知识点。 言归正传,让我们先从了解Java语言开始。 Java语言的由来 Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。[引用自 百度百科 ] Java语言的特点 优点 1、简单。 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性。去掉了C和C++中许多复杂功能,如指针

【Java基础】反射篇

跟風遠走 提交于 2019-12-25 10:35:09
前言:java如何在运行时识别对象和类的信息.有两种实现方式 传统RTTI 反射 RTTI和反射有什么区别? 对RTTI来说,编译器在编译时打开和检查.class文件而反射机制来说,.class文件在编译时是不可获取得,所以在运行时打开和检查.class文件() 反射是框架设计的灵魂 原理 : 反射首先是能够获取到Java中的反射类的字节码,然后将字节码中的方法,变量,构造函数等映射成 相应的 Method、Filed、Constructor 等类 应用 :取出类的modifiers,数据成员,方法,构造器,和超类 找出某个接口里定义的常量和方法说明. 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到. 在运行时刻调用动态对象的方法. 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 二 反射的作用 总结:通过Class类与java.lang.reflect类库一起对反射进行支持 反射的使用网上教程很多,研究Class类,Filed

JVM执行引擎

风格不统一 提交于 2019-12-25 07:30:23
1.概述    执行引擎是jvm核心组成部分之一,建立在物理器,硬件和操作系统层面之上,引擎在执行代码时会有解释执行和编译执行两种选择,输入字节码文件,字节码解析输出结果. 2.栈帧    栈帧是用于支持虚拟机进行方法调用和执行方法的结构,是虚拟机运行时数据区中的虚拟机栈的栈元素,存储方法的局部局部变量,操作数栈,动态链接和方法返回地址等信息,对应着入栈和出栈的过程. 上面是栈帧的基本结构,在线程中的方法调用链中同时执行很多方法,但只有栈顶的栈帧才是有效的,称为当前栈帧,与这个帧关联的叫当前方法,而栈帧的结构中主要分为局部变量表,操作栈,动态链接和方法返回地址 3.局部变量表    Local Variable Table是一组变量存储空间,用于存放方法参数和方法内部定义的局部变量,当java去编译class文件时,方法的code属性中的max_locals数据项用于确定和分配局部变量表的大小容量,在局部变量表中容量以slot为最小单位,在32位中可以存放基本数据类型,但是reference中的引用通过直接或间接的查找java堆中的起始地址索引,或者直接找到对象所属数据类型在方法区中的存储信息。而在64位中,虚拟机会以高位对齐的方式分配两个连续的slot空间,而只有long和double处于64位空间中,所以java规定将读写分为2个32位的读写做法.由于局部变量是线程私有的数据

吃透了这些JVM核心知识点,阿里架构师都问不倒你!(附学习笔记+面试真题+视频解析)

自闭症网瘾萝莉.ら 提交于 2019-12-25 00:13:53
作为 Java 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM 知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。而大多数人可能没有对 JVM 的实际开发和使用经验,接下来这一系列文章将带你深入了解 JVM 需要掌握的各个知识点。这也将帮助你完成从初级程序员到高级程序员的转变。 今天分享一份平时学习的Java程序员必备的JVM学习文档,这份文档不管是懂得JVM的开发者和刚刚学习的朋友都是一份非常不错的内容,同时也是面试复习的精选文档!还准备了一份目前互联网公司Java面试的高频面试知识点文档免费分享给大家! 这份JVM知识整理文档内容包括: JVM面试专题 JVM和性能优化学习思维笔记(Xmind) 深入理解Java虚拟机 Java虚拟机并发编程 Java虚拟机:JVM高级特性与最佳实践 JVM性能调优-JVM内存整理及GC回收 实战Java虚拟机 快速获取资源传送门: 史上最详细面试学习核心笔记免费获取:Java基础+算法+JVM+数据库+SSM框架+Redis+消息队列+Spring全家桶等 内存模型以及分区,需要详细到每个区放什么。 JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放在方法区 new: 方法区:主要是存储类信息,常量池

Java是什么?只需5分钟,了解java必须要懂的知识点

给你一囗甜甜゛ 提交于 2019-12-24 20:11:43
Java是什么? Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。下面是我收集的Java必备基础知识点,希望对你有用。 1、 简述Java的基本历史 Java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机、冰箱等。 2、 Java特点 简单的、面向对象的、分布式的、安全的、稳定的、与平台无关的、可解释的、多线的、动态的语言。 3、 什么是Java? Java:一种编程语言、一种开发环境、一种应用环境、一种部署环境。 4、 Java的三种版本: JME:是面向内存有限的移动终端. 为消费性产品设计的; JSE: 是SUN公司针对桌面开发和低端商务计算方案开发的版本。为笔记本电脑、PC机设计的; JEE: 是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构Java必备基础知识点Java必备基础知识点。 为企业级的、服务器端的高端应用而设计的; 5、Java技术的主要特性 Java虚拟机 垃圾回收 代码安全性 6、Java虚拟机的功能 (1)通过 ClassLoader 寻找和装载 class 文件 (2)解释字节码成为指令并执行,提供 class 文件的运行环境 (3)进行运行期间垃圾回收 (4)提供与硬件交互的平台 7、

ART与Dalvik

跟風遠走 提交于 2019-12-24 09:23:36
ART与Dalvik Dalvik Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机。它可以支持已转换为 .dex (即 Dalvik Executable )格式的 Java 应用程序的运行, .dex 格式是专为 Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。 Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例, 并且每一个 Dalvik 应用作为一个独立的 Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 很长时间以来, Dalvik 虚拟机一直被用户指责为拖慢安卓系统运行速度不如 IOS 的根源。 2014 年 6 月 25 日, Android L 正式亮相于召开的谷歌 I/O 大会, Android L 改动幅度较大,谷歌将直接删除 Dalvik ,代替它的是传闻已久的 ART 。 ART Android 4.4 提供了一种与 Dalvik 截然不同的运行环境 ART 支持, ART 源于 google 收购的 Flexycore 的公司。 ART 模式与 Dalvik 模式最大的不同在于,启用 ART 模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地, 这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。 ART 使用

第九章 浏览器模型

半世苍凉 提交于 2019-12-24 07:05:07
浏览器环境概述 1. 代码嵌入网页的方法 网页中嵌入JS代码,主要有三种方法: (1)JS标签 <javascript> 有个 type 属性,用来指定脚本类型,老式浏览器用 text/javascript ,新式浏览器用 application/javascript 。 可以用JS标签加载外部脚本,如果脚本文件使用了非英语字符,还应该注明字符的编码 charset="utf-8" 为了防止攻击者篡改外部脚本,JS标签允许设置一个 integrity 属性,写入该外部脚本的Hash签名,用来验证脚本的一致性。 (2)事件属性 网页元素的事件属性(比如onclick和onmouseover),可以写入JS代码。当指定事件发生时就会调用这些代码。 < button id = "myBtn" onclick = "console.log(this.id)" > 点击 < / button > (3)URL协议 在URL位置写入 代码,使用的时候就会执行JS代码。 < a href = "javascript: console.log('Hello')" > 点击 < / a > 2. script元素 2.1 工作原理 正常的网页加载流程是这样的 浏览器一边下载HTML网页,一边开始解析。也就是说不等下载完,就开始解析。 解析过程中,浏览器发现 <script> 元素,就暂定解析

1111

早过忘川 提交于 2019-12-24 04:09:39
1.简述JVM的运行原理? Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语音编写并编译的程序可以运行在这个平台上。运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class)文件。 再然后字节码被装入内存,一旦字节码进入虚拟机,他就会被解释器执行,或者是被即使码发生器有选择的转换成机器码执行 2.简述JVM的运行原理? JVM栈由堆,栈,本地方法栈,方法区等部分组成 堆: 所有通过new创建的对象的内存都在堆中分配,堆的大小可以通过-Xmx和-Xms来控制。 堆被划分为新生代和旧生代,新生代又被进一步分为Eden和Survivor区,最后Survivor由From Space 和To Space组成 栈:每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存在此次方法调用过程中的临时变量,参数和中间结果。 本地方法栈:用于支持native方法的执行,存储了每个native方法调用的状态 方法区:存放了要加载的类信息,静态变量,final类型的常量,属性和方法信息。 JVM 用 久待(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize 来指定最小值和最大值 3.GC是什么

JVM的体系结构

只愿长相守 提交于 2019-12-24 03:12:44
JVM的体系结构图 简介 从图上可以看出JVM启动时按照其配置要求,申请一块内存,并根据JVM规范和实现将内存划分为几个区域。class二进制文件信息将会被放入“方法区”,对象实例将会被放入“java堆”等 类加载器的作用     通过一个类的全限定名来获取描述此类的二进制字节流,并将此类相关信息加载到JVM的方法区,并创建一个 java.lang.Class 对象作为此类的访问接口, class 对象的引用也保存在方法区内,每一个类加载器都有独立的类名称空间。比较两个类是否相等的前提是两个类是由同一个类加载器加载的,否则两个类比不相等。 类加载器分类    从JVM角度来讲,只有两种类加载器:启动类加载器、其他的类加载器。因为前者是JVM虚拟机的一部分,后者是独立于JVM实现的 ,跟细致的分类有以下几种 1.启动类加载器(Bootstrap ClassLoader)   作用:启动类加载器是使用C++语言实现的(HotSpot),负责加载JVM虚拟机运行时所需的基本系统级别的类,如java.lang.String, java.lang.Object等等。启动类加载器(Bootstrap Classloader)会读取 {JRE_HOME}/lib 下的jar包(如 rt.jar)和配置,然后将这些系统类加载到方法区内。 由于类加载器是使用平台相关的底层C/C++语言实现的,

转发:几个常见的 NodeJS 误区

Deadly 提交于 2019-12-23 19:03:14
很多不熟悉 NodeJS 的开发者,总是对 NodeJS 抱有怀疑态度,其中的原因基本是对其具有误解,而这些误解往往又最终导致自己放弃 NodeJS 的学习。在这篇文章里,我将会尽可能言简意赅的介绍和解释这些误区的所在之处,并不遗余力地挽留那些正在迷茫中的人,同时增强正在使用 NodeJS 的开发者们的信心。 一、 NodeJS 是一门服务器语言 这个错误非常明显,NodeJS 是一个使用 Chrome V8 引擎运行 JavaScript 程序的运行时环境,正如 JRE (Java Runtime Environment) 是 Java 程序的运行环境一样,语言还是 JavaScript,和我们在浏览器中运行 JS 脚本没什么不同。区别在于,NodeJS 提供了一整套用于服务器编程(准确来说应该是除网页编程外)的工具包,例如处理网络连接的 net, http, https 模块,用于读写文件的 fs 模块等,以及 NPM 仓库中数十万的第三方模块。这些模块,加上 NodeJS 运行时,为 JavaScript 语言提供了跨平台、跨领域的编程能力。 除了服务器编程,NodeJS 还被广泛应用于客户端编程,如桌面软件( Electron 框架),手机软件( React-Native 框架, Apache Cordova 框架)等,当然还有现在特别火的“前端”开发,例如 React