当执行Stringa="abc";时候(前提条件是:执行这行代码之前在常量池中没有abc,若有,a直接引用在常量池中abc不在创建一个对象,若无,执行下面的描述)java虚拟机会在栈中创建char型的值‘a‘,‘b‘,‘c‘,然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char类..
分类:
编程语言 时间:
2016-04-16 19:46:06
阅读次数:
206
Android APK免安装启动在讲诉具体实现之前说一下涉及的知识点
Java虚拟机启动流程
启动Java虚拟机,创建ClassLoader,将java字节码加载进入ClassLoader,随即找到入口函数,执行。当需要创建一个对象的时候,向Java虚拟机发送一个请求,Java虚拟机接收到请求以后,首先在内存中进行寻找,若存在,则解析class,找到相应的方法执行。若内存中不存在,则...
分类:
移动开发 时间:
2016-04-16 19:31:50
阅读次数:
288
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode) 2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java ...
分类:
编程语言 时间:
2016-04-16 16:39:54
阅读次数:
128
Java代码到字节码——第一部分 原文地址 作者:James Bloom 译者:张坤 理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生了什么。这种理解不仅能确保你对语言特性有逻辑上的认识而且做具体的讨论时可以理解在语言特性上的妥协和副 ...
分类:
编程语言 时间:
2016-04-16 16:39:36
阅读次数:
330
一、类加载过程 执行时机:编译程序——>执行程序(JVM启动、程序运行),类加载发生在程序运行期间 各个阶段:分为加载阶段、连接阶段(验证、准备、解析)、初始化、使用、卸载 执行顺序:大体是按以上阶段依次执行,但相互间有交叉 加载——>验证(文件格式)——>继续加载——>解析——>验证(元数据、字节 ...
分类:
编程语言 时间:
2016-04-16 10:53:07
阅读次数:
249
Java把内存划分成两种:一种是栈内存,一种是堆内存。 堆栈的概念逻辑上的,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这 ...
分类:
编程语言 时间:
2016-04-16 10:49:52
阅读次数:
149
以下内容大多来自周志明的《深入理解Java虚拟机》。 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来。 什么是applet? 作为新手,都不知道applet是什么鬼,看看百度百科的解释,应该就明白了: JavaApplet就是用J ...
分类:
编程语言 时间:
2016-04-16 10:44:22
阅读次数:
152
在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域)、Heap space(堆区域)、Java Stacks(Java栈)。其中永久保存区域主要存放C ...
分类:
编程语言 时间:
2016-04-15 19:42:03
阅读次数:
186
虚拟机参数配置 http://blog.163.com/magicc_love/blog/static/18585366220127240627186/ Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 http://blog.sina.com.cn/s/blog_701c ...
分类:
编程语言 时间:
2016-04-15 02:00:18
阅读次数:
168
API(未完待续):一.System是一个final类,它的属性:in,out,err 例如:System.in常用方法:1.CurrentTimeMills 当前系统时间,返回值以毫秒为单位的当前时间 2.exit 终止当前Java虚拟机 例如:System.exit(0) 0代表异常终止,推荐用 ...