文章分类 -  JAVA底层

摘要:进程 vs. 线程 我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。 阅读全文
posted @ 2018-01-29 20:17 寂静沙滩 阅读(3609) 评论(0) 推荐(1)
摘要:网上有很多讨论IO阻塞非阻塞,同步异步的文章,说阻塞IO影响了服务性性能,所以现在使用NIO(非阻塞)可以有效优化。但又查了很多资料,明确表示如果线程是blocked状态,是不消耗cpu资源的,监视屏是不会分配给blocked状态的线程cpu时间片的。而线程的blocked状态可以由IO阻塞引起,也 阅读全文
posted @ 2016-02-05 16:50 寂静沙滩 阅读(296) 评论(0) 推荐(0)
摘要:在JVM规范里是没有规定线程要以哪种形式创建——具体实现用1:1(内核线程)、N:1(用户态线程)、M:N(混合)模型的任何一种都完全OK。Java并不暴露出不同线程模型的区别,上层应用是感知不到差异的(只是性能特性会不太一样…)。 其中用户线程在内核之上支持,并在用户层通过线程库来实现。不需要用户 阅读全文
posted @ 2016-02-05 16:15 寂静沙滩 阅读(1845) 评论(1) 推荐(1)
摘要:<一> 基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object) 。方法的引用参数,在栈空间分配 阅读全文
posted @ 2015-12-29 18:03 寂静沙滩 阅读(1551) 评论(0) 推荐(1)
摘要:JVM在运行时将数据划分为6个区来储存,而不仅仅是大家所熟悉的Stack和Heap区域,这6个区域的示意图如下: PC寄存器、Java栈、本地方法栈是每个线程独自拥有的,其他区域是整个JVM实例中的所有线程共有的。 第一块:PC 寄存器 每一个线程都拥有一个PC Register,当线程启动(sta 阅读全文
posted @ 2014-01-13 23:21 寂静沙滩 阅读(333) 评论(0) 推荐(0)
摘要:最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范。 系统的看了jsr 133规范的前面几个章节的内容,觉得受益匪浅。废话不说,简要的介绍一下java内存规范。 什么是内存规范 在jsr-133中是这么 阅读全文
posted @ 2013-12-17 19:51 寂静沙滩 阅读(237) 评论(0) 推荐(0)
摘要:Java内存主要分为stack, heap, data segment, and code segment. stack(栈):存放非静态基本数据类型变量的名称和值,以及非静态对象的引用 若是非静态基本数据类型变量,则变量的名称和值一起被存入stack(栈)中,变量的名称指向变量的值,比如int a 阅读全文
posted @ 2013-03-07 13:02 寂静沙滩 阅读(178) 评论(0) 推荐(0)
摘要:Java把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。 阅读全文
posted @ 2012-12-27 23:33 寂静沙滩 阅读(277) 评论(0) 推荐(0)