Java内存模型 Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。 Java ...
分类:
编程语言 时间:
2018-10-06 16:38:30
阅读次数:
150
这篇文章由几个问题组成,目的是想厘清JVM的一些基本概念,同时最后引出JVM知识体系的几大块,以后的文章就围绕这几大块展开。 1. 什么是JVM?它有什么作用? JVM是Java虚拟机的简写,Java是先编译后解释型的语言,其最初设计的目的是“一次编写,到处运行”,也就是要实现平台的无关性,这个特性 ...
分类:
编程语言 时间:
2018-10-05 12:29:53
阅读次数:
175
Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。 它们不是独立的应用程序,没有main()方法。 它们不是由用户或程序员调用,而是由另外一个应 ...
分类:
其他好文 时间:
2018-10-05 00:55:38
阅读次数:
152
一、JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器。 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责JAVA_HOME/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar ...
分类:
编程语言 时间:
2018-10-04 18:26:04
阅读次数:
210
1.概述 JVM是运行在操作系统之上的,它与硬件没有直接的交互 1.1类装载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标示, 并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 1.2类加载器 ...
分类:
其他好文 时间:
2018-10-04 17:50:33
阅读次数:
224
所有的java程序文件的后缀是*.java,而任何一个*.java程序首先必须经过编译,编译之后会形成一个*.class(字节码文件),而后在计算器上执行,但是解释程序的计算器并不是一台真正意义上的计算器,而是一台由软件和硬件模拟出来的计算机 java虚拟机(java Virtual Machine ...
分类:
编程语言 时间:
2018-10-04 14:08:34
阅读次数:
141
Java堆是和Java应用程序关系最为紧密的内存空间,几乎所有的对象都存放在堆中。并且堆是完全自动化管理的。 根据垃圾回收机制的不同,Java堆有可能有不同的结构。最为常见的一种就是将整个Java堆分为新生代和老年代。其中,新生代存放新生对象或者年龄不大的对象。 老年代存放老年对象。新生代可能分为e ...
分类:
编程语言 时间:
2018-10-04 09:14:11
阅读次数:
138
Java虚拟机的基本结构如图所示 类加载子系统负责从文件系统或网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行是的常量池信息, 包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。 Java堆在虚拟机启动的 ...
分类:
编程语言 时间:
2018-10-03 21:57:57
阅读次数:
164
Java发展至今,出现了很多Java虚拟机,从最初的Classic的Java虚拟机到Exact VM虚拟机,到现在最终被大规模部署和应用的是Hotspot虚拟机。 整数在Java虚拟机中的表示 在Java虚拟机中,整数有byte、short、int、long四种,分别表示8位、16位、32位、64位 ...
分类:
编程语言 时间:
2018-10-01 23:15:47
阅读次数:
180
先行发生原则,可以帮你判定是否并发安全的,从而不必去猜测是否是线程安全了! 如果Java内存模型中所有有序性都靠volatile和synchronized来完成,那么编写代码会很繁琐,但日常Java开发中并没有感受到这一点,正是因为Java语言的“先行发生”原则。这个原则非常重要,它是判断数据是否存 ...
分类:
其他好文 时间:
2018-10-01 11:57:37
阅读次数:
207