JVM
文章平均质量分 82
早就戒了
这个作者很懒,什么都没留下…
展开
-
浅谈JVM(四)——类加载
Java中任何一个类型对象在使用之前都必须经历加载、连接、初始化三个类加载步骤。一旦成功执行这三个步骤,它就可以被使用了,我们可以通过访问类的静态类成员表变量,或者使用new关键字创建对象实例。类加载器类加载是JVM执行类加载的前提。简单来说,类加载的主要任务就是根据一个类的全限定名来读取此类的二进制字节流(.class)文件到JVM内部,然后再转为一个实例对象。在程序中,类加载器只有三种:Boo原创 2017-10-18 20:14:26 · 383 阅读 · 0 评论 -
浅谈JVM(二)——内存分配和垃圾回收
对于C/C++开发人员来说,他们需要在代码层面上控制一个对象生命周期,自由宣布对象的产生和灭亡。我们称之为手动的内存管理。虽然灵活,但是增加了内存溢出和内存泄漏的风险。而对于Java来说,我们并不需要手动的内存管理,因为JVM自带了内存管理机制,实现了自动的内存管理,并且会大大降低出现内存溢出和内存泄漏的风险。但是,过度的依赖于JVM自带的内存管理机制,会弱化我们在程序出现内存溢出时问题的定位和解原创 2017-10-16 21:00:58 · 346 阅读 · 0 评论 -
浅谈JVM(五)——字节码文件ClassFile
Java代码被前端编译器javac成功编译为一个符合Java虚拟机规范的字节码文件,然后JVM读取运行字节码文件。那么我们平常写的java代码编译后的字节码文件是怎样的呢?以及怎样的字节码文件符合规范的呢?一般来说ClassFile文件结构如下;ClassFile{ u4 magic; u2 minor_version; u2原创 2017-10-30 15:36:53 · 305 阅读 · 0 评论 -
浅谈JVM(一)——JVM内存模型
JVM内存模型如下图所示:JVM运行时,内粗可以分为如下几个部分:堆(Heap)方法区(Method Area)虚拟机栈(Java Stack)本地方法区(Native Method Stack)程序计数器(PC Register)堆(Heap)和方法区堆(Heap)Java堆是绝大多数Java开发人员最关注的。堆是属于线程共享的一块内存区域,它在JVM启动的时候被创建,并且在实际空间中原创 2017-10-16 19:39:04 · 396 阅读 · 0 评论 -
浅谈JVM(三)——HotSpot垃圾收集器
清楚完JVM的内存回收算法以后,我们就进入JVM自动内存管理的实现,GC。JAVA发展至今,衍生了很多GC版本,比如:Serial/SerialOld收集器、Parallel/ParallelOld收集器、CMS收集器,以及JDK7中后序版本出现的G1收集器等。 基于分代的概念,不同代的内存中活动着不同的GC,不同代的GC如何使用,还要看具体的应用场景。 首先大家需要知道两个重要的概念:串行还原创 2017-10-17 21:13:27 · 308 阅读 · 0 评论 -
JAVA并发编程(三)——同步控制(下)
要实现并发的同步控制,除了上篇文章中介绍的使用synchronized和ReentrantLock以外,JDK中内部提供了许多使用的API和框架。这里我将介绍其中几种常用的。Semaphore(信号量)ReadWriteLock(读写锁)CountDownLatch(倒计时器)CyclicBarrier(循环栅栏)Semaphore我们知道,不论是synchronized还是Reentra原创 2017-10-12 20:08:57 · 223 阅读 · 0 评论