java虚拟机
文章平均质量分 80
想作会飞的鱼
~~~
展开
-
java虚拟机中的常用jdk命令
JavaJDK中的命令行工具本文内容主要学习自《深入理解Java虚拟机》,超赞的一本书强烈推荐!一,常用JDK监控和故障处理工具命令名称全称用途jstatJVM Statistics Monitoring Tool用于收集Hotspot虚拟机各方面的运行数据jpsJVM Process Status Tool显转载 2017-03-31 21:26:50 · 1543 阅读 · 0 评论 -
java虚拟机中的线程安全
一、概述当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。我们这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全原创 2017-04-04 15:26:29 · 519 阅读 · 0 评论 -
java虚拟机的类加载过程
一、概述java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可原创 2017-04-03 15:13:33 · 1564 阅读 · 0 评论 -
java虚拟机中的内存分配原则
一、概述对象的内存分配,往大方向讲,就是在堆上分配。对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。 少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。接下来介绍几条最普遍的内存分配规则,并通过代码去验证这些规则。 二、内存分配规则原创 2017-04-03 11:54:58 · 1527 阅读 · 0 评论 -
Java虚拟机中的类加载器
一、概述JVM设计者把类加载阶段中的“通过'类全名'来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。二、双亲委派模型从原创 2017-04-04 00:15:44 · 728 阅读 · 0 评论 -
Java虚拟机中的Class类文件结构
一、概述Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。字节码class类文件是由一系列字节码命令组成,用于表原创 2017-04-03 14:30:06 · 685 阅读 · 0 评论 -
java中的反射机制详解
一、什么是Java反射机制Java反射机制是指在运行状态中,对于任意一个类,都能够通过这个类本身获取这个类的所有属性和方法信息;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。也就是说java反射可以实现在运行时可以知道任意一个类的属性和方法。那么我们为什么要用反射机制?直接通过new关键字创建对象不就可以了吗?原创 2017-04-11 20:10:58 · 536 阅读 · 0 评论 -
Java虚拟机中内存模型和volatile型变量
一、概述Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。 此处的变量(Variables)与Java编程中所说的变量有所区别,它包括了实例字段、 静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不会存在竞争问题。二、内存模型1、基本划分Java内存模型规定了原创 2017-04-04 12:28:02 · 609 阅读 · 0 评论 -
java虚拟机的线程描述
一、并发的三个特性1、原子性(Atomicity)由Java内存模型来直接保证的原子性变量操作包括read、 load、assign、 use、 store和write,我们大致可以认为基本数据类型的访问读写是具备原子性的(例外就是long和double的非原子性协定,只要知道这件事情就可以了,无须太过在意这些几乎不会发生的例外情况)。如果应用场景需要一个更大范围的原子性保证(经常会遇到)原创 2017-04-04 14:45:40 · 1080 阅读 · 0 评论 -
java虚拟机中的软引用
5、为什么需要使用软引用 首先,我们看一个雇员信息查询系统的实例。我们将使用一个Java语言实现的雇员信息查询系统查询存储在磁盘文件或者数据库中的雇员人事档案信息。作为一个用户,我们完全有可能需要回头去查看几分钟甚至几秒钟前查看过的雇员档案信息(同样,我们在浏览WEB页面的时候也经常会使用“后退”按钮)。这时我们通常会有两种程序实现方式:一种是把过去查看过的雇员信息保存在内存中,每一个存储原创 2017-04-02 13:33:14 · 377 阅读 · 0 评论 -
Java虚拟机的垃圾回收和收集算法
一、概述Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。二、如何判断对象是否可获得垃圾收集器在对堆中的对象进行垃圾回收前,必须原创 2017-04-02 13:28:37 · 469 阅读 · 0 评论 -
java虚拟机中的内存区域划分
一、概述Java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:其中方法区和堆是由所有线程共享的数据区。虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。二、详解下面来具体介绍这几个数据区。1、程序计数器程序计数器是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器。字节码解析器工作时通过改变程序计数器的值原创 2017-04-01 11:33:50 · 2439 阅读 · 0 评论 -
java虚拟机中的垃圾收集器和JVM常用设置参数
一、概述Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器。二、常见垃圾收集器介绍1、Serial垃圾收集器Serial是最基本、历史最悠久的垃圾收集器,使用复制算法,曾经是JDK1.3.1之前新生代唯一的垃圾收集器。Serial是一原创 2017-04-02 16:46:22 · 1160 阅读 · 0 评论