
Java-虚拟机
莫特@
微风拂静叶 缘起何方
展开
-
同步-异步--阻塞-非阻塞
同步与异步牵扯到这两个概念的前提是两个线程会有某些微妙的联系并需要进行通信,不然牵扯不到同步与异步问题。同步场景:我要去上厕所,去了卫生间以后发现蹲位都被占了,并且此时还有两个人在排队等候,而我又必须上厕所,此时我就必须排队等待,这就是所谓的同步。特点是必须等待,等的时间不能干其他任何事情(排队的时候还是可以玩哈手机,抽根烟的,但是蹲位有没有空出来需要自己去判断)。异步场景:去了厕所还原创 2017-01-08 21:25:48 · 407 阅读 · 0 评论 -
Java内存泄漏与内存溢出
简介:首先这两个不是同一个概念,内存溢出不一定是因为内存泄漏造成的,内存泄漏也不一定就会造成内存溢出。内存溢出是指当前jvm分配的内存不满足Java应用实际的需求,这样在运行过程中就会造成内存溢出,内存溢出的本质是内存不够用;内存泄漏指的是本来不需要的内存始终不能被回收,最后导致越来越多的内存被占用,这里要注意一点:操作系统在内存的分配上有一个虚拟内存的概念,虚拟内存就是作为开发人员不...原创 2017-01-10 17:58:59 · 352 阅读 · 0 评论 -
Java中gc与finalize
gc()只能回收Java堆上的内存,而不能回收栈中的内存,一般情况下Java中new的对象都是在栈中分配内存,因此gc回收栈内存没有问题,但是如果以某些特殊方法在栈中分配内存那么gc是无法释放这些内存的,这种情况下一般是是通过finalize释放的,Java的gc回收之前会调用对象的finalize方法,但是要注意一点,即使是程序员显式调用gc也不一定会触发垃圾回收,垃圾回收一般只会在内存不够用的原创 2016-12-01 11:45:37 · 452 阅读 · 0 评论 -
JVM垃圾回收详解
简述垃圾回收是Java的一个重要突破,相对于C/C++程序员不需要手动请求和释放内存,而是有JVM通过固有的算法自动分配和回收,那是不是就是说我们可以愉快的使用Java而不需要关注内存方面的问题呢?答案是否定的,虽然JVM为我们提供了良好的内存分配与回收算法和机制,但是如果我们在开发的时候不注意代码的质量同样会造成内存溢出等问题,所以了解或者熟悉JVM的垃圾回收机制是非常必要的。1转载 2017-06-24 13:27:29 · 356 阅读 · 0 评论 -
多线程状态下使用同步机制的本质原因
简述在Java的学习中必然会遇到多线程和同步问题,对于初学者一般只会理解到相关api的使用,但是很少能够真正知道为什么要对多线程环境下的对象进行同步,接下来我就谈谈自己的一些理解。JVM堆与JVM栈宏观室是分离的,而微观上则又相互联系,这种分配方式使得JVM堆中的内容可以被多个JVM栈共享(也可以理解为多个线程访问同一个或者多个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的原创 2017-06-24 14:06:29 · 4403 阅读 · 0 评论 -
基本数据类型与引用类型的存储位置引发的疑问
一个问题引发的思考(基本数据类型为什么不存放在堆中?)在看到这个问题的时候内心有点小惊讶,因为跟我之前理解的不一样,那么基本数据类型到底存放在哪儿呢?在此我结合现有的只是谈谈我的理解。基本数据类型的值放在栈中,那么栈中的该基本数据类型变量从哪儿来的呢?我认为是从方法区来。我们都知道栈的生命周期决定于线程,那基本数据类型的值存放在栈中当线程完成的时候被销毁怎么办?这个不用担心,因为一个程序中原创 2017-06-24 14:32:10 · 1762 阅读 · 0 评论 -
JVM堆栈详解<摘录>
JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在哪儿,另外JVM堆中存的是对象。JVM栈中存的是基本数据类型和JVM堆中对象的引用。JVM基础概念:JVM堆与JVM栈数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引转载 2016-11-01 10:34:47 · 636 阅读 · 0 评论 -
JVM内存划分
简述Java虚拟机内存整体上划分为5个部分(本地方法栈、Java虚拟机栈、程序计数器、堆、方法区)。这五个部分只是Java虚拟机规范的固定,但是Java虚拟机并不唯一,而是多个机构甚至多个企业都有不同的实现方式,因此不同内存区域的具体实现并不是固定的,这个约定于具体的应用场景。本地方法栈本地方法栈和java栈的原理和作用是非常相似的。区别是值java栈是为执行java方法执行服务的。本原创 2017-06-25 15:08:11 · 314 阅读 · 0 评论