Java程序运行内存机制】的更多相关文章

Java程序运行内存机制 栈内存包留调用方法.变量的区域,堆内存是new对象的区域,方法区为保存class文件的区域. 程序刚开始时,先加载类文件相应的数据到方法区,然后就从main()方法开始执行.执行main()方法,main()方法入栈,执行phone one = new Phone(),首先Phone one声明一个变量并入栈,然后new Phone()在堆内存申请一块空间,此时,申请的堆内存中保留着类文件中的那些变量:然后,申请区域中的方法则是一快存储着方法地址的区域.然后堆中申请的区…
Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解释型 编写一次则解释一次 举个例子:翻译官,客户说一句同时翻译一句 应用:网页 程序运行机制 源程序( .java 文件)--> Java 编译器 字节码( *.class 文件 )--> 类装载器 --> 字节码校验器 -->解释器 --> 操作系统平台…
基础 JDK:Java Development Kit(Java开发者工具 包含JRE和JVM) JRE:Java Runtime Environment(java运行时环境,包含JVM) JVM:Java Virtual Machine(java虚拟机,模拟了一个cpu处理程序,java跨平台核心) 卸载JDK 1.删除Java安装目录 2.删除JAVA_HOME 3.删除path下关于Java的目录 4.cmd 测试Java -version查看是否成功删除 安装JDK 1.下载JDK8 2…
Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”. Java垃圾回收(Garbage Collection):不用使用的内存空间应该回收:在C/C++等语言中,由程序员负责回收无用的内存:Java语言消除了程序员回收无用内存的职 责,它提供一种系统级线程跟踪存贮空间的分配情况,并在JVM空闲的时候,检…
Java既是编译型语言,又是解释型语言 java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码运行. Java虚拟机JVM 不同平台上的JVM不同,但是都提供了相同的接口. 开发Java准备 下载安装Java8的JDK,并将jdk的安装路径添加到环境变量中. 开发Java需要安装JDK,JDK包含Java编译器(javac命令工具).Java运行时环境(JRE).常用的Java类库等. JR…
Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤. 一.高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型两种 . 1.1 编译型语言 编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译"成可被该平 台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译 CCompile ) . 编译生成的可执行性程序…
1.编译型:compile,把所有东西翻译好,若有更新需要重新全部翻译.执行速度够快,对操作系统要求比较低.开发操作系统时用到编译型语言,例如c/c++...运行时需编译整个程序 2.解释性:运行一个编译一个.但要用以前的需要重新编译.网页,还有服务器脚本,对速度要求不高.例如JavaScript.Python.VBScript(解释性语言)两者各有利弊.主要是加载时机不同. 随着技术的发展编译型.解释型两者概念越来越模糊,电脑内存动则16G.8G.所以解释型语言效率也是非常高的,因为硬件一直在…
一.编译型和解释型语言区别 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以任何的高级语言编写的程序都必须转换成计算机语言,也就是机器码.而这种转换的方式有两种: 编译 解释 编译型语言 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行程序. 优缺点 优点:只需要编译一次,就可多次运行,以后运行不再需要编译,执行效率高:编译后不可修改,保密性较好. 缺点: 代码需要编译才可运行,可移植性差,…
第一个JAVA程序的编写和运行 1.使用记事本编辑 public class Welcome{ public static void main(String[] agrs){ System.out.println("Hello World!"); } } 2.保存为:d://mycode/Welcome.java 3.进入控制台,进入:d://mycode/目录. 4.javac Welcome.java 5.java Welcome 6.出现运行结果: JAVA程序运行机制分析 计算…
目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人类计算机历史上影响深远的编程语言,从某种程度上来看,它甚至超出了编程语言的范畴,成为一种开发平台,一种开发规范. Java语言是一门非常纯粹的面向对象编程语言,它吸收了C++语言的各种优点,又摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为…
Java程序运行机制  Java的运行主要分两步:先编译再解释执行 (1)先通过“编译器”将Java源程序(.java)编译成Java字节码文件(.class) (2)通过不同的虚拟机(JVM)将字节码文件解释为机器语言并执行 Java跨平台原理         JVM 把这种不同软.硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植.  JVM 是 Java 平台架构的基础,Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的. 因为程序都需要编译生成字节码…
Java程序运行机制 编译型(操作系统 c/c++) 解释型(网页 不追求速度) 程序运行机制…
首先我们来看一下java程序在底层是怎么工作的: JAVA有两种核心机制: Java虚拟机(Java Virtual Machine): 1.java虚拟机可以理解成一个以字节码为机器指令的CPU. 2.对于不同的平台,有不同的虚拟机. 3.java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”. 垃圾收集机制(Garbage collection) 1.不再使用的内存空间应回收——垃圾收集 2.Java语言相对于C/C++而言消除了程序员回收无用内存空间的责任:提供了一种系统…
课堂要点: 编写第一个java程序以及理解java的运行机制. 1.基本命令介绍: javac命令: 编译java文件得到.class字节码文件 -encoding 参数:指定编译的编码 java命令:执行.class文件,将字节码转为机器码在计算机运行 -version 参数:输出java版本 windows有关命令: 切换盘符: 盘符代号 + : 切换路径: cd 路径名 cd .. 表示切换到上级目录 1.编写第一个java程序 HelloWorld.java: //声明一个类名字叫Hel…
[IT168 技术]当调用java命令运行某个Java程序时,该命令将启动一条Java虚拟机进程,同一个JVM的所有线程,所有变量都处于同一进程里,它们都是用该JVM进程的内存区. 程序运行到最后正常结束. 程序运行到使用System.exit()或Runtime().exit()代码结束程序. 程序执行过程中遇到未捕获的异常或错误而结束. 程序所在平台强制结束了JVM进程. 类的加载 类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,而系统中所有的类,…
在文章JAVA设计模式-动态代理(Proxy)示例及说明和JAVA设计模式-动态代理(Proxy)源码分析都提到了反射这个概念. // 通过反射机制,通知力宏做事情 method.invoke(object, args); // 通过反射,将h作为参数,实例化代理类,返回代理类实例. return cons.newInstance(new Object[]{h}); 而且在 // 将接口类对象数组clone一份. final Class<?>[] intfs = interfaces.clon…
类的生命周期 1.加载 将.class文件从磁盘读到内存 2.连接 2.1 验证 验证字节码文件的正确性 2.2 准备 给类的静态变量分配内存,并赋予默认值 2.3 解析 类装载器装入类所引用的其它所有类 3.初始化 为类的静态变量赋予正确的初始值,上述的准备阶段为静态变量赋予的是虚拟机默认的初始值,此处赋予的才是程序 编写者为变量分配的真正的初始值,执行静态代码块 4.使用 5.卸载 类加载器的种类 启动类加载器(Bootstrap ClassLoader) 负责加载JRE的核心类库,如JRE…
Java的运行机制是:先编译,后解释. 典型的编译型编程语言是:C和C++. eg:用c语言编写的*.c文件编译生成*.h文件,通过链接将*.h文件链接成*.exe文件,然后就可以运行,编译型的高级语言程序运行效率高. 典型的解释型编程语言是:Python. eg:*.py程序运行不会生成中间文件,而是由解释器直接将源文件一边编译,一边解释为可执行的二进制代码.所以解释型的编程语言程序运行效率低. Java程序运行不同与典型的编译型和解释型编程语言,Java先编译后解释,此时的编译生成的是*.c…
本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和方法区都各自负责存储哪些内容.最后用一小块代码示例来帮助理解Java程序运行时内存的变化. Java程序执行过程 步骤 1: 写源代码,源代码将以.java的文件格式保存在电脑硬盘中. 步骤 2: 编译器(compiler)检查是否存在编译期错误(例如缺少分号,关键字拼写错误等).若通过检测,编译器…
1. Java语言比较特殊, 由Java编写的程序需要经过编译步骤,但这个编译步骤不会产生特定平台的机器码,而是生成一种与平台无关的字节码(也就是.class文件).这种字节码不是可执行性的,必须使用Java解释器来解释执行.因此可以认为: Java语言既是编译型语言,也是解释型语言. 或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言. Java程序的执行过程,必须经过先编译,后解释两个步骤.   2. Java语言里,负责解释执行字节码文件的是Java虚拟机,即JVM(Jav…
在Java语言中.字符串起着非常关键的数据.字符串的声明与初始化主要有例如以下两种情况:(1) 对于String s1=new String("abc")语句与String s2=new String("abc")语句,存在两个引用对象s1.s2,两个内容同样的字符串对象"abc".它们在内存中的地址是不同的.仅仅要用到new总会生成新的对象. (2) 对于String s1 = "abc"语句与String s2 = &qu…
据我们所知,Java程序是跨平台的.那么Java是如何实现跨平台的呢?看完下面几句话就会恍然大悟! 1.为什么Java语言既是编译型语言又是解释型语言呢? 答:运行Java程序,首先需要经过编译,编译后会生成一种与平台无关的字节码(也就是*.java文件),而这种字节码文件是无法运行的.然后,还需要java解释器来解释执行. 2.Java是如何实现跨平台的呢? 答:关键就在上一个问题中的Java解释器,也就是Java虚拟机,即JVM(Java virtual machine),JVM就是负责解释…
一.完成一个Java程序的流程:编辑Java源代码→编译Java程序→运行Java程序 1. 在记事本中编写Java程序,然后保存为.java类型文件(Java源文件) 2. 使用javac命令将源文件编译成字节码文件(*.class文件) 3. 使用java命令解释执行字节码文件 [示例] 1. 在路径D:\下创建一个HelloWorld.java文件,并编写如下代码 public class HelloWorld { public static void main(String[] args…
建议114:不要在构造函数中抛出异常 Java异常的机制有三种: Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等. RunTimeException类及其子类表示的是非受检异常,是系统可能会抛出的异常,程序员可以去处理,也可以不处理,最经典的就是NullPointException空指针异常和IndexOutOfBoundsException越界异常. Exception类及其子类(不…
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找到这个总入口 Java SE 8 Documentation ,想阅读什么就点什么.本博客不定期从 Oracle 官网搬砖.这里介绍的工具是 jar 和 jarsigner . 前言 在前面的 在Linux中安装Oracle JDK 8以及JVM的类加载机制 这一篇中我已经初步讨论过 Java 程序的组成:Java 程序中没有独立函数,只有类和类中…
"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 对着书上的代码自己敲的时候方便 "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了.…
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p…
最后,让我们正式编一个程序(注释⑤).它能打印出与当前运行的系统有关的资料,并利用了来自Java标准库的System对象的多种方法.注意这里引入了一种额外的注释样式:“//”.它表示到本行结束前的所有内容都是注释: // Property.java import java.util.*; public class Property { public static void main(String[] args) { System.out.println(new Date()); Properti…
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在Java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中). 取到锁后,他就开始执行同步代码(被synchronized修饰的代码):线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁执行同步代码了.这样就保证了同步代码在统一时刻只有一个线程在执行. 众所周知,在Java多线程编程中…
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class…