一、为什么需要并行 业务要求 http处理多个客户端请求 java虚拟机启动多个线程 进程开销比线程大的多 性能 多线程在多核系统比单线程要好的多 摩尔定律失效 二、几个重要概念 2.1 同步和异步 synchronous,asynchronous 2.2 并发和并行 concurrency,par ...
分类:
编程语言 时间:
2018-04-05 11:52:02
阅读次数:
254
http://www.jb51.net/article/105920.htm https://www.cnblogs.com/Qian123/p/5707562.html Java类加载全过程 一个java文件从被加载到被卸载这个生命过程,总共要经历4个阶段: 加载->链接(验证+准备+解析)->初 ...
分类:
编程语言 时间:
2018-04-04 21:02:14
阅读次数:
196
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Cla ...
分类:
编程语言 时间:
2018-04-03 17:27:10
阅读次数:
192
这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件。 上图显示的组件分两个章节解释。第一章讨论针对每个线程创建的组件,第二章节讨论了线程无关组件。 线程 JVM 系统线程 每个线程相关的 程序计数器 栈 本地栈 栈限制 栈帧 局 ...
分类:
编程语言 时间:
2018-04-03 10:56:17
阅读次数:
221
一、运行时数据区域 Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、本地方法栈、堆、程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区 1.1 程序计数器 程序计数器是一块较小的内存,他可以看做是当前线程所执行的行号指示器。字节码解释器工作的时候就是通过改变 ...
分类:
编程语言 时间:
2018-04-02 16:03:26
阅读次数:
175
分为4个方面来介绍内存分配与回收,分别是内存是如何分配的、哪些内存需要回收、在什么情况下执行回收、如何监控和优化GC机制。 java GC(Garbage Collction)垃圾回收机制,是java与C/C++的主要区别之一。通过对jvm中内存进行标记,自主回收一些无用的内存。目前使用的最多的是s ...
分类:
编程语言 时间:
2018-04-02 15:58:47
阅读次数:
155
这一章我们对初始化进行一下更深的理解: 类在初始化的时候,静态变量的声明语句以及静态代码块都被看作类的初始化语句,Java虚拟机会按照初始化语句在类文件中的先后顺序来依次加载它们。 上图中a的初始化其实经过了四步1、a被初始化为默认值02、a被赋予正确的初始值13、执行静态代码块,将a的值赋为24、 ...
分类:
其他好文 时间:
2018-04-01 16:06:10
阅读次数:
161
jstack是java虚拟机自带的一种堆栈跟踪工具。 功能 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停 ...
分类:
编程语言 时间:
2018-03-31 17:26:15
阅读次数:
228
一、线程的调度与控制 通常计算机只有一个CPU,CPU在某一个时刻只能执行一条命令,线程只有得到CPU时间片,也就是使用权,才可以执行命令。在单核CPU的机器上,线程并不是并行运行的。java虚拟机主要负责线程调度,取得CPU的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型,Java使用抢 ...
分类:
编程语言 时间:
2018-03-31 14:15:10
阅读次数:
241
1.强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 2.软引用(SoftRefer ...
分类:
编程语言 时间:
2018-03-30 14:13:38
阅读次数:
228