随笔分类 -  L编程高级

摘要:1,使用JVisualVM时,打开Threads监控,我们可以发现Java的线程状态有以下几种: 2,JVM线程状态: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAITING是调用了wait 阅读全文
posted @ 2019-11-26 14:45 光何 阅读(2283) 评论(0) 推荐(0) 编辑
摘要:一、JAVA编译相关概念 1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。 2、JIT编译(just-in-time com 阅读全文
posted @ 2019-11-18 10:22 光何 阅读(1957) 评论(0) 推荐(1) 编辑
摘要:一、概念 哈希算法(hash algorithm):是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表(hash table):根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表 阅读全文
posted @ 2019-07-24 16:57 光何 阅读(3497) 评论(0) 推荐(0) 编辑
摘要:内存泄露 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 Java中的内存泄露 Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露。对象都是有生 阅读全文
posted @ 2019-07-03 13:53 光何 阅读(220) 评论(0) 推荐(0) 编辑
摘要:一、BIO Blocking IO: 同步阻塞的编程方式。 BIO编程方式通常是在JDK1.4版本之前常用的编程方式。编程实现过程为:首先在服务端启动一个ServerSocket来监听网络请求,客户端启动Socket发起网络请求,默认情况下ServerSocket回建立一个线程来处理此请求,如果服务 阅读全文
posted @ 2019-05-13 13:51 光何 阅读(376) 评论(0) 推荐(0) 编辑
摘要:ThreadPoolExecutor 线程池的意义 提升性能:它们通常在执行大量异步任务时,由于减少了每个任务的调用开销,并且它们提供了一种限制和管理资源(包括线程)的方法,使得性能提升明显; 统计信息:每个ThreadPoolExecutor保持一些基本的统计信息,例如完成的任务数量。 Threa 阅读全文
posted @ 2019-04-26 17:06 光何 阅读(652) 评论(0) 推荐(0) 编辑
摘要:一、加锁与无锁CAS 在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小,可以无所顾忌地做事,但对于悲观派而已,他们总会认为发展事态如果不及时控制,以后就无法挽回了,即使无法挽回的局面几乎不可能发生。这两种派系映射到并发编程中 阅读全文
posted @ 2019-04-19 09:21 光何 阅读(365) 评论(0) 推荐(0) 编辑
摘要:为什么需要线程池?在java中,使用线程来执行异步任务时,线程的创建和销毁需要一定的开销,如果我们为每一个任务创建一个新的线程来执行的话,那么这些线程的创建与销毁将消耗大量的计算资源。同时为每一个任务创建一个新线程来执行,这样的方式可能会使处于高负荷状态的应用最终崩溃。所以线程池的出现为解决这个问题 阅读全文
posted @ 2019-04-03 14:30 光何 阅读(351) 评论(0) 推荐(0) 编辑
摘要:一、Java同步容器 同步容器是用来解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。 线程安全的容器对象: Vector, Hashtable。线程安全容器对象,都是使用synchronized方法实现的。 concurrent包中的同步容器,大多数是使用系统底层技术实现 阅读全文
posted @ 2019-04-03 13:47 光何 阅读(4110) 评论(0) 推荐(1) 编辑
摘要:一、synchronized synchronized锁什么?锁对象。可能锁对象包括: this, 临界资源对象,Class类对象。 1,同步方法 synchronized T methodName(){} 同步方法锁定的是当前对象。当多线程通过同一个对象引用多次调用当前同步方法时,需同步执行。 2 阅读全文
posted @ 2019-04-02 14:30 光何 阅读(242) 评论(0) 推荐(0) 编辑
摘要:配置方式: java [options] MainClass [arguments] options - JVM启动参数。 配置多个参数的时候,参数之间使用空格分隔。 参数命名: 常见为 -参数名 参数赋值: 常见为 -参数名=参数值 | -参数名:参数值 内存参数: -Xms:初始堆大小,JVM启 阅读全文
posted @ 2019-04-01 14:03 光何 阅读(905) 评论(0) 推荐(0) 编辑
摘要:jmap jmap,Java Memory Map。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内 阅读全文
posted @ 2019-03-29 15:48 光何 阅读(1731) 评论(0) 推荐(0) 编辑
摘要:直接内存与堆 java memory = direct memory(直接内存) + jvm memory(MaxPermSize +Xmx) 直接内存则是一块由程序本身管理的一块内存空间,它的效率要比标准内存池要高,主要用于存放网络通信时数据缓冲和磁盘数据交换时的数据缓冲。 DirectMemor 阅读全文
posted @ 2019-03-29 15:20 光何 阅读(384) 评论(0) 推荐(0) 编辑
摘要:Dump Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件一般用来给驱动程序编写人员调试驱动程序用的,在java中用来分析正在运行的程序在内存中的堆栈信息。 jstack Jstack是Jdk自带的线程(栈)跟踪工具,主要用来查看Java线程的调用堆栈, 阅读全文
posted @ 2019-03-14 17:48 光何 阅读(325) 评论(0) 推荐(0) 编辑
摘要:曾几何时,我们学习java都不再研究jdk而直接使用IDEA、eclipse和Netbeans,仿佛我们就认为我们的程序是这些编辑器编译出来的,这时多么可笑。殊不知,编辑器就是方便我们编辑开发的,而真正编译、调试在起作用的仍然是JDK,编辑器进行非编辑操作时底层就是在调用JDK中的命令。以下命令只存 阅读全文
posted @ 2019-03-14 14:33 光何 阅读(934) 评论(0) 推荐(0) 编辑
摘要:一、垃圾收集器的分类 1、次收集器 Scavenge GC,指发生在新生代的GC,因为新生代的Java对象大多都是朝生夕死,所以Scavenge GC非常频繁,一般回收速度也比较快。当Eden空间不足以为对象分配内存时,会触发Scavenge GC。 一般情况下,当新对象生成,并且在Eden申请空间 阅读全文
posted @ 2019-03-13 17:52 光何 阅读(1986) 评论(0) 推荐(0) 编辑
摘要:一、JVM结构 1、类加载子系统与方法区 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。 2、Java堆 j 阅读全文
posted @ 2019-03-13 16:57 光何 阅读(7932) 评论(0) 推荐(0) 编辑
摘要:国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak reference是什么, 怎么用, 只是期望有人能够提到这个concept和java的GC相关. 很可惜的是, 20多个拥有5年以上 阅读全文
posted @ 2018-06-24 22:53 光何 阅读(207) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联 我们知道有时候一个对象的变量会被多个线程所访问,这时就会 阅读全文
posted @ 2018-06-24 22:44 光何 阅读(249) 评论(0) 推荐(1) 编辑
摘要:1. 为什么使用线程池 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达 阅读全文
posted @ 2018-06-21 19:35 光何 阅读(340) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示