后台
听风觉雨
这个作者很懒,什么都没留下…
展开
-
JVM GC参数以及GC算法的应用
之前一篇Blog已经将GC的机制以及GC的算法讲了一下。而这篇Blog主要是讨论这些GC的算法在JVM中的不同应用。1. 串行收集器串行收集器是最古老,最稳定以及效率高的收集器可能会产生较长的停顿,只使用一个线程去回收-XX:+UseSerialGC新生代、老年代使用串行回收 新生代复制算法 老年代标记-压缩 串行收集器的日志输出: 0.844:...转载 2018-08-15 21:08:46 · 118 阅读 · 0 评论 -
什么时候会发生FullGC
堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生代即方法区的回收(JDK8中无永生带了),出现Full GC的时候经常伴随至少一次的Minor G...转载 2018-08-15 20:51:41 · 45569 阅读 · 13 评论 -
你能不能谈谈,Java GC是在什么时候,对什么东西,做了什么事情?
GC地球人都知道,Java有个东西叫垃圾收集器,它让创建的对象不需要像c/cpp那样delete、free掉,你能不能谈谈,GC是在什么时候,对什么东西,做了什么事情?一.回答:什么时候?1.系统空闲的时候。 分析:这种回答大约占30%,遇到的话一般我就会准备转向别的话题,譬如算法、譬如SSH看看能否发掘一些他擅长的其他方面。2.系统自身决定,不可预测的时间/调用Sys...转载 2018-08-15 20:43:20 · 2000 阅读 · 0 评论 -
Java HashMap遍历方式性能探讨
keySetentrySetHashMapMap.foreachlambda参与百度AI开发者大赛赢75万奖金+25万奖品,(提供教程)加群:418589053 >>> 关于HashMap的实现这里就不展开了,具体可以参考JDK7与JDK8中HashMap的实现JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了...转载 2018-08-15 20:37:33 · 112 阅读 · 0 评论 -
ConcurrentHashMap原理分析
ConcurrentHashMap不变模式Segment锁分离曾经在 [高并发Java 五] JDK并发包1 中提到过ConcurrentHashMap,只是简单的提到了下ConcurrentHashMap的优点,以及大概的实现原理。而本文则重点介绍ConcurrentHashMap实现的细节。HashMap就不介绍了,具体请查看JDK7与JDK8中HashMa...转载 2018-08-15 20:11:16 · 127 阅读 · 0 评论 -
ConcurrentHashMap总结
并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,f...原创 2018-08-15 20:07:09 · 94 阅读 · 0 评论 -
hashMap线程不安全的原因及表现
hashMap出现线程不安全的原因: HashMap的实现里没有锁的机制,因此它是线程不安全的。其实只要有锁的机制,可以通过锁实现线程安全,我们在读写HashMap对象的时候加锁,以保障这个对象的线程安全,但不代表HashMap本身是线程安全的,因为是外力(你自己加的锁)使然。为啥不在HashMap内部加锁让它变成线程安全?这样会增加单线程访问的资源消耗,即使没有多线程访问,...转载 2018-08-15 20:03:36 · 8250 阅读 · 0 评论 -
java中创建线程的三种方法以及区别
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程下面让我们分别来看看这三种创建线程的方法。 ------------------------继承Thread类创建线程----...转载 2018-08-03 10:29:00 · 161 阅读 · 0 评论 -
Java的关键字与标识符
Java作为一门编程语言,与其他语言一样,有字符集、标识符、和关键字、变量、常量、语句等编程语言的基本要素。1、关键字abstract boolean break byte case catch char class const continue default do double else ...转载 2018-08-03 10:19:09 · 125 阅读 · 0 评论 -
优化hibernate的7大措施
一、笼统的概括。1. 使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5. 一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰二、详细的讲解。1、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严...转载 2018-08-03 10:14:18 · 1474 阅读 · 0 评论 -
深入理解 Java 垃圾回收机制
一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及...转载 2018-08-03 10:07:08 · 85 阅读 · 0 评论 -
获取ServerConfig设置的参数值
getParameter()是获取post/get传递的参数值;getInitParameter获取Tomcat的server.xml中设置Context的初始化参数;getAttribute()是获取对象容器中的数据值;getRequestDispatcher是请求转发;...原创 2018-08-03 09:49:30 · 856 阅读 · 0 评论 -
Java 强引用、软引用、弱引用、虚引用 和垃圾回收器的关系以及调优原理
一、背景大家知道Java是运行在虚拟机上的高级语言,而对于虚拟机,其中有一个特别重要的功能就是垃圾回收器(GC),通过GC机制Java程序可以非常智能的对垃圾进行回收,从而实现非常智能的内存管理,而不用向C或C++一样需要十分谨慎的自己去处理内存问题,从而避免了很多不必要的麻烦。那么GC机制是如何实现的呢?作为GC工作的主战场JVM 的堆内存,是如何去处理那些过期或者在资源紧缺的情况下对对象的...转载 2018-08-15 21:15:55 · 227 阅读 · 0 评论 -
[高并发Java 一] 前言
1、关于高并发的几个重要概念1.1 同步和异步首先这里说的同步和异步是指函数/方法调用方面。很明显,同步调用会等待方法的返回,异步调用会瞬间返回,但是异步调用瞬间返回并不代表你的任务就完成了,他会在后台起个线程继续进行任务。1.2 并发和并行并发和并行在外在表象来说,是差不多的。由图所示,并行则是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一...转载 2018-08-15 21:24:10 · 107 阅读 · 0 评论 -
JSTl forEach
<c:forEach>循环标签可以根据循环条件(通常和el表达式使用,el表达式我们有机会再说,在这里我就默认你会基本的el表达式了),遍历集合并从中取出我们想要的数据。如果在JSP页面中使用JAVA代码来遍历数据,会使页面非常混乱,不利于维护和分析。使用<c:forEach>循环标签可以是页面更加直观、简洁。 <c:forEach>有以下的属性...转载 2018-11-14 10:59:27 · 1288 阅读 · 0 评论 -
Java中八种基本数据类型占用字节空间总结
基本数据类型 所占用空间大小byte b; 1字节short s; 2字节int i; 4字节long l; 8字节char c; 2字节(C语言中是1字节)float f; 4字节double d; 8字节boolean bool; false/true 1字节基本数据类型注意事项:1、未带有字符后缀标识的整数默认为int类型;未带有字符后缀标识的浮...转载 2018-08-17 13:48:55 · 7778 阅读 · 0 评论 -
java 各基本数据类型 所占有的字节数
Int: 4 字节Short: 2字节Long: 8字节Byte: 1字节Character: 2字节Float: 4字节Double: 8字节Boolean:系统没有提供Size方法; public class Calcsizof { /** * @param args */ private static voi...转载 2018-08-17 13:45:44 · 153 阅读 · 0 评论 -
Java实现两个有序的单项链表的合并
无意中看到一道题,如下:现有两个有序(升序)的单向链表,请编写程序将这两个链表合并成一个,并确保合并后的链表也是升序的单向升序链表定义:public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}请在下面的代码框架基础上编写:public class Solution {pub...转载 2018-08-16 23:42:14 · 218 阅读 · 0 评论 -
合并两个有序链表,合并后依然有序
//合并两个有序链表,合并后依旧有序//当第一个链表是空链表就把它和第二个链表合并,结果是第二个链表;同样,第二个链表是空表,合并结果是第一个链表;如果两都是空链表,合并结果也是空链表//比较两个链表的头结点,小的作为合并后的头结点,在剩余节点中,再次比较两个链表的头结点Node* MergeList(Node* pHead1, Node* pHead2){if (pHead1 == ...转载 2018-08-16 23:08:28 · 377 阅读 · 0 评论 -
数据库事务详解
概述事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。 ACID 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。 隔离级别 ACID这4个特征中,最难理解的是隔离性。在标准SQL规范中,定义了4个事务...转载 2018-08-16 22:38:21 · 119 阅读 · 0 评论 -
.集合Set,HashSet,TreeSet及其底层实现HashMap和红黑树;Collection总结
ONE.Set集合one.Set集合的特点 无序,唯一TWO.HashSet集合1.底层数据结构是哈希表(是一个元素为链表的数组)2.那么HashSet如何来实现元素的唯一性的呢?通过一HashSet添加字符串的案例查看HashSet中add()的源码,看为什么相同的字符串没有被加入HashSet中interface Collection {...}interf...转载 2018-08-16 13:23:02 · 1878 阅读 · 0 评论 -
mysql_建立索引的优缺点&性能优化
建立索引的优缺点:为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。 第三、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四、在使...转载 2018-08-16 11:11:25 · 201 阅读 · 0 评论 -
Java中CAS详解
在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 我们先从最简单的入手,逐步分析这2种的区别。 一、synchronized和lock的用法区别 synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法...转载 2018-08-16 10:29:23 · 150 阅读 · 0 评论 -
Java常用的八种排序算法与代码实现
排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法。1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如题所示:直接插入排序(St...转载 2018-08-16 09:53:31 · 101 阅读 · 0 评论 -
java内部类详解
说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正。 请尊重...转载 2018-08-13 16:47:14 · 77 阅读 · 0 评论 -
[高并发Java 二] 多线程基础
1. 什么是线程线程是进程内的执行单元某个进程当中都有若干个线程。线程是进程内的执行单元。使用线程的原因是,进程的切换是非常重量级的操作,非常消耗资源。如果使用多进程,那么并发数相对来说不会很高。而线程是更细小的调度单元,更加轻量级,所以线程会较为广泛的用于并发设计。在Java当中线程的概念和操作系统级别线程的概念是类似的。事实上,Jvm将会把Java中的线程映...转载 2018-08-15 21:28:28 · 103 阅读 · 0 评论 -
Java中三种简单注解介绍和代码实例
简单Java注解JDK5提供的简单注解类型只有3个. 这三个都是用来预防错误或者进行提醒的,分别是:1.Override2.Deprecated3.Suppresswarnings需要注意,JDK5(另一个说法,Tiger)实际上并没有许多内置注解;相反,它允许核心Java支持注解特性的能力. JSR-175中严格规定它用来定义元数据功能. 需要由程序员编写自定义的注解类型,...转载 2018-08-03 09:35:16 · 472 阅读 · 0 评论 -
Java中private、protected、public和default的区别
public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类...转载 2018-08-02 14:31:07 · 78 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模...转载 2018-08-14 16:01:43 · 68 阅读 · 0 评论 -
正则表达式知识详解
正则表达式知识详解 一、什么是正则表达式?1.定义:正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集...转载 2018-08-01 11:28:58 · 220 阅读 · 0 评论 -
replace和replaceAll的区别
replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: 1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*"...转载 2018-08-01 11:23:48 · 276 阅读 · 0 评论 -
PreparedStatement与Statement的区别
本人的几点浅见,各位大大不喜勿喷。先说下这俩到底是干啥的吧。其实这俩干的活儿都一样,就是创建了一个对象然后去通过对象调用executeQuery方法来执行sql语句。说是CreateStatement和PrepareStatement的区别,但其实说的就是Statement和PrepareStatement的区别,相信大家在网上已经看到过不少这方面的资料和博客,我在此处提几点,大家看到过的,就...转载 2018-08-01 11:14:43 · 82 阅读 · 0 评论 -
线程的状态及转换
Java中的线程的状态分为6种。1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的成为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权,此时处于就绪...转载 2018-07-31 16:58:10 · 169 阅读 · 0 评论 -
static的相关内容
JVM内存总体一共分为了 4个部分:stack segment、 heap segment、 code segment、 data segment)stack segment(栈):局部变量:如main函数中声明的str变量。如图中,str,t存在于stack区:栈中保存基本数据类型的变量和自定义的对象的引用(不是对象),对象本身都存放在堆区中,被执行的方法的也是pu...转载 2018-07-31 15:41:35 · 93 阅读 · 0 评论 -
继承时方法调用顺序
我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁。下面是一个简单的继承,来查看代码的执行顺序: package test; class Person{ static{ System.out.println("父类的静态块")...转载 2018-07-31 15:37:28 · 1034 阅读 · 0 评论 -
转发和重定向的区别
示例://获取username信息String username=request.getParameter("username"); //转发与重定向 if(username.equals("admin")){ //提示用户已存在,不能注册 request.setAttribute("message","该用户已存在,不能注册");//添加提示信息,需要在userCreate.js...转载 2018-07-31 14:54:24 · 80 阅读 · 0 评论 -
StringBuild和StringBuffer的区别
做项目中经常用到String和StringBuilder,String可以用“+”来对字符串进行拼接,StringBuilder用append进行拼接,一直不明白既然可以用String,问什么还要用StringBuilder。尽管在做数据库查询的时候,习惯性的用了StringBuilder对查询语句进行拼接,但仍然不知道原因。今天看视频的时候,又看到了StringBuffer,感觉用法又差不多,所...转载 2018-07-31 13:45:35 · 284 阅读 · 0 评论 -
Map的底层结构
Map是以键值对来存储对象的,它的底层实际上是数组和链表来组成的; 当使用put方法时,先查找出数组位置是否存在对象,通过key.hashcode对数组长度取余;存在,则把里面的链表拿出来,判断链表里面是否存在key值与传递过来的key值一样的对象,存在,则把传递过来的value取代链表key对应的value,不存在,则直接通过链表的add()方法加到链表后面; 当使用get方法时...原创 2018-07-26 08:45:28 · 12221 阅读 · 0 评论 -
Mybatis框架下SQL注入漏洞处理
一、SQL注入漏洞基本原理在常见的web漏洞中,SQL注入漏洞较为常见,危害也较大。攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透来获取服务器权限,从而进入内网。注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入...转载 2018-07-25 09:48:01 · 1668 阅读 · 1 评论 -
针对hibernate 中多对多关系 的查询时需要注意的点
如teacher表和student表是多对多关系,下面是他们的对象及Xml文件Student.javapackage com.landray.domain;import java.util.HashSet;import java.util.Set;public class Student { private int id; private String name; private Set<...原创 2018-02-28 16:14:25 · 178 阅读 · 0 评论