字节码

Java基础一

不打扰是莪最后的温柔 提交于 2020-02-08 20:38:26
一、新手上路 1、下载JDK, http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,安装JDK,安装时候记住安装JDK的路径。 2、服务器JAVA环境变量配置(百度这个很多介绍) JAVA_HOME 安装JDK的路径 Path 中添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar; 测试:win+R -> cmd -> 输入命令 java ; javac ; java -version ; 二、编程语言分为:编译型语言和解释型语言 三、Java发展史简介:   Java是Sun于1995年推出的编程语言   1998年 发行版本1.2 更名java2   2000年 1.3;1.4   2004年 5.0   2005年 6.0   2009年 Oracle甲骨文 74亿美元收购Sun,进而取得java版权。   2011年 java7.0   2014年 8.0   2017年9月21日 java9.0 java社区多。 四、java的语言特性:跨平台。   平台即CPU和OS的结合体。   跨平台即可以在不同平台中运行代码

Java虚拟机JVM的小总结

女生的网名这么多〃 提交于 2020-02-08 20:35:54
1.Java的三种核心机制 Java虚拟机 JVM (Java Virtual Machine) 垃圾回收机制 GC ( Garbage Collection) 代码安全性检测机制(Code Security) 2.Java虚拟机JVM JVM可以看做一个以字节码为机器指令的CPU,它是Java语言的运行环境,正是JVM实现了Java语言的跨平台性。 源程序(*.java文件) →Java编译器→ 字节码(*.class文件) →类装载器→ 字节码校验器→解释器→操作系统平台 3.Java语言为什么是跨平台性? 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码(.class file)。然后不同的硬件平台上安装有不同的Java虚拟机(JVM), 由JVM来把字节码(.class文件)再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。实现了“一次编 译,随处运行”。 来源: https://www.cnblogs.com/zssblog/p/5929634.html

关于Java虚拟机JVM的简单了解

时光怂恿深爱的人放手 提交于 2020-02-08 20:35:31
JVM主要功能 Java是一种高级编程语言。 用高级语言编写的程序不能直接在任何机器上运行。 首先,需要将其翻译成特定的机器语言,javac编译器就专门来干这个事儿的,它把Java程序(含有的.java源代码文件)转换成机器代码(称为字节码或.class文件)。 Java虚拟机(JVM)是安装在我们计算机中的虚拟机,JVM自己的机器语言是字节码。 这样子Javac编译器就好处理啦,因为它只需要为JVM生成字节码就行了,而不是为每种类型的机器生成不同的机器代码。 JVM执行Javac编译器生成的字节码并生成输出就OK了。JVM正是java跨平台的原因。 所以,现在我们知道JVM的主要功能是执行编译器生成的字节码。 每个操作系统都有不同的JVM,但是在执行字节码后它们产生的输出在所有操作系统中都是相同的。 这意味着在Windows上生成的字节代码可以在Mac OS上运行,反之亦然。 这就是我们将java称为平台无关语言的原因,下图展示了这个过程: JVM总结: Java虚拟机(JVM)是在实际机器(您的计算机)上运行并执行Java字节代码的虚拟机。 JVM不了解Java源代码,这就是为什么我们需要使用javac编译器来编译* .java文件, 从而获取包含JVM理解的字节代码的* .class文件。 JVM使java可移植(一次编写,随处运行)。 每个操作系统都有不同的JVM

JAVA之内存结构

℡╲_俬逩灬. 提交于 2020-02-08 20:29:21
概述 JAVA是我们现在最常用的开发语言,而他的垃圾回收机制(Garbage Collection)的重要作用不言而喻,以下简称GC,所以了解GC至关重要,现本人对于GC机制以前的理解和现在的理解记录整理一下,供大家参考和指正。 说起GC机制,大部分人都把这项技术当做JAVA语言的伴生物。事实上,GC的历史比JAVA久远的多,比如:1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言,当然本文只讲解JAVA的GC机制。废话到此为止。 除了基础知识的讲解还有本人之前的测试数据和测试日志,JDK的版本是:JDK1.8.0_131。 JVM简介 在JAVA程序中,GC运行在JVM虚拟机中的,所以有必要了解JVM的基础知识; 所有的开发人员在开发运行JAVA程序的时候,都会有这样的困惑,JVM虚拟机是JAVA的核心竞争力,他们的内存结构是什么样的呢?见下图,当然也是本人借鉴网上的: JVM内存结构主要有三大块:堆内存、方法区和栈。而堆内存就是JVM中最大的一块由年轻代和老年代组成,而年轻代又分为三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比列来分配。 方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆)

Java虚拟机之栈帧

给你一囗甜甜゛ 提交于 2020-02-08 15:27:13
简述 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈的栈元素。 栈帧存储了方法的 局部变量表 、 操作数栈 、 动态链接 和 方法返回地址 等信息。 总的来看,其结构大概如下图黄色区域那样。 在单个线程中,每一个调用方法jvm都会为其分配一个栈帧。上图中,main方法中包含一个栈帧,然后在main方法里面调用了computer()方法,然后这个computer()方法也会含有自己的栈帧。另外每个栈帧内部都含有自己的局部变量表、操作数栈、动态链接、方法返回地址等信息。 局部变量表 局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为Class文件时,就在方法表的Code属性的max_locals数据项中确定了该方法需要分配的最大局部变量表的容量。在方法执行时,虚拟机是使用局部变量表完成参数变量列表的传递过程,如果是实例方法,那么局部变量表中的每0位索引的Slot默认是用于传递方法所属对象实例的引用,在方法中可以通过关键字“this”来访问这个隐含的参数,其余参数则按照参数列表的顺序来排列,占用从1开始的局部变量Slot,参数表分配完毕后,再根据方法体内部定义的变量顺序和作用域来分配其余的Slot。局部变量表中的Slot是可重用的,方法体中定义的变量

JVM内存模型1

ε祈祈猫儿з 提交于 2020-02-08 15:21:20
转载自: https://www.liangzl.com/get-article-detail-121504.html 抽象 解析 程序计数器 程序计数器(Program Counter Register)是 JVM 中一块较小的内存区域,保存着当前线程执行的虚拟机字节码指令的内存地址(可以看作当前线程所执行的字节码的行号指示器)。 如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址(可以理解为上图所示的行号),如果正在执行的是native方法,这个计数器的值为undefined。 JVM的多线程是通过线程轮流切换并分配CPU执行时间片的方式来实现的,任何一个时刻,一个CPU都只会执行一条线程中的指令。为了保证线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程间的程序计数器独立存储,互不影响。 此区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域,因为程序计数器是由虚拟机内部维护的,不需要开发者进行操作。 虚拟机栈 虚拟机栈(Java Virtual Machine Stacks)是线程隔离的,每创建一个线程时就会对应创建一个Java栈,即每个线程都有自己独立的虚拟机栈。这个栈中又会对应包含多个栈帧,每调用一个方法时就会往栈中创建并压入一个栈帧,栈帧存储局部变量表、操作栈、动态链接

Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

…衆ロ難τιáo~ 提交于 2020-02-08 12:56:18
前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事儿,更重要的是不成体系的内容对读者也不够友好。所以以后的博客尽量按系列来写,不过偶尔也会穿插其他的内容。接下来一段时间我会把写博客的重点放在 JVM (Java Virtual Machine) 和 JUC (java util concurrent ) 上,对 Java 虚拟机和 Java 并发编程进行一系列的介绍,欢迎关注。 了解 JVM 是对 Java 开发人员的基本要求,JVM 的相关内容自然也成了现在 Java 程序员面试的重要考点。不过估计很多小伙伴和我一样,长时间醉心于 CRUD,却忘了去了解一下更底层、更基础的东西,殊不知这些才是决定你能在这条路上走多远的关键因素,那接下来我们就一起来深入学习一下看似神秘的 JVM 吧。JVM 总体来看内容还是很多的,我会把最重要的内容介绍给大家,不过如果你有时间和精力的话,还是推荐你去看一下《深入理解Java虚拟机》这本书,确实是有口皆碑。本系列文章也会引用很多此书的内容并加上我自己的理解,如果你坚持看下去的话,相信会有很大的收获。 首先对 JVM 做个简单的介绍,JVM 是 JDK 的一部分,《Java 虚拟机规范》(The

1.1、java语言特点

流过昼夜 提交于 2020-02-08 10:32:07
官方定义:简单,面向对象,结构中立,可移植,分布式,解释执行,动态,健壮,安全,高性能,多线程 1.简单 摒弃c++的指针计算,内存管理,多继成,Java有自己的垃圾回收机制。 2.面向对象 Every is object .万物皆对象,不是面向过程的语言 3.结构中立 Java语言编译后的字节码是相同的,仅需不同的虚拟机。所以java具有结构中立性。 4.可移植性 java 编译器会把java语言编译成与机器无关的字节码文件,被编译后字节码都是统一的,只要通过不同版本的虚拟机(JVM)进行解释就可实现跨平台 源文件(.java)-编译-> 字节码(.class)-虚拟机解释->机器码–>执行命令 ·java虚拟机: 针对不同操作系统,硬件,Java有专属的虚拟机,针对不同的操作系统和cpu等,Java虚拟机有不同版本。 5.分布式 修房子,一个人负责搬砖运转,包工头嫌太慢请了一群人一起搬砖运砖。后来包工头让一群人负责搬砖,另一群人负责运砖。 一群人一起搬砖运砖叫集群,多个服务器支持一个项目 一群人搬砖,一群人运砖叫分布式, 多个干不同事的服务器协同支持一个 项目 类型分为:数据分布和操作分布 数据分布 功能:将数据分散储存在网络上的不同主机上 操作分布 功能:将计算分散在网络上的不同主机上 可以进行网络编程,程序既可以访问本地资源,也可以访问网络资源,访问网络上的其他java对象

Java概述

隐身守侯 提交于 2020-02-08 07:24:49
Java 概述 1990 年由 James Gosling 领导的“ Green 计划”,准备为下一代智能家电(如电视机、微波炉、电话、机顶盒)编写一个通用控制系统。最初采用的是 C++ 语言 , 后设计出一个新的编程语言: Oak 。 1994 年将 Oak 语言更名为 Java 。 1996 年 Java1.0 版正式推出。 Java 的早期版本称为 JDK ( Java Development Kit ),如 JDK1.0 、 JDK1.1 。 1998 年 12 月升级为 1.2 版(里程碑式的版本),并更名为 Java 2 (第二代 Java )。原来的开发工具集 JDK 更名为 J2SDK ( Java 2 Software Development Kit )。 Java 2 分为三个体系: 2SE ( Java 2 Software Development Kit , Standard Edition ):适用于一般计算机的 Java 程序开发和运行平台。 J2EE ( Java 2 Software Development Kit , Enterprise Edition ):企业 e_Business 架构和 Web Service 服务开发及应用平台。 J2ME ( Java 2 S 。 oftware Development Kit , Micro

Java语言概述

独自空忆成欢 提交于 2020-02-08 06:20:07
说明:本博客仅仅是本人经验所得,如有不足,请指出 Java是由Sun Microsystems公司于 1995年5月推出的面向对象程序设计语言(以下简称Java语言)和Java平台的总称。 Java历史: • 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言。主要用于像有线电视转换盒这类消费设备。 • Sun公司的人后来发现Oak是一种已有的计算机语言的名字,于是,将其改名为Java(太平洋岛屿爪哇盛产的一种味道非常美妙的咖啡)。 • 1995年5月,Sun公司对外正式宣布了Java语言 Java语言的基本特征:   简单、动态、高性能、跨平台、纯面向对象、分布式、多线程、安全、健壮性 Java是面向对象的语言:   – Java是基于信息隐藏和抽象数据类型概念的纯面向对象的语言。   – Java中每个对象封装数据和方法,而方法实施对数据的处理。   – Java中可以通过继承、组合机制实现代码复用。 Java是跨平台的开发语言。    – Java跨平台的实现原理:Java程序运行在虚拟机之上,Java虚拟机中的Java解释器用来解释执行Java编译器编译之后的程序。   java源代码(* . java)------>(Java编译器)-------->(字节码* . class) Java虚拟机(JVM)主要实现Java字节码的解释和执行