Java基础
丰王十
今天走的路,是你昨天埋下的土。
展开
-
多节点任务框架设计之数据库设计解决方案
多个个节点在获取数据库中的任务时,会存在多个节点的同步获取而导致的任务多次处理情况。因此,如果想要避免重复执行任务,必须找到合适的解决方案。 下面,主要介绍项目中用到的解决方案:第一,假设存在一个任务uploadFileTask线程,专门用于上传文件,而文件路径及其信息存放在tb_upload_file_task表中。第二,为了实现一个任务只被一个节点获取到,原创 2016-03-04 11:03:57 · 2188 阅读 · 1 评论 -
java知识系统介绍
一、并发编程 + activemq + 实战案例并发编程基础篇第一天1、课程大纲简要介绍2、线程基础概念、线程安全概念、多个线程多个锁概念3、对象锁的同步和异步4、脏读概念、脏读业务场景5、Synchronized概念、Synchronized代码块、Synchronized其他细节第二天1、Volatile关键字概念、线程优转载 2016-09-23 11:31:49 · 909 阅读 · 0 评论 -
java实现FTP上传下载:FTPClient类进行FTP上传下载大文件(包含导致假死现象)
1.首先,程序中设置ftp请求方式为被动模式,即程序去请求ftp服务器,要求服务器来打开一个端口,让客户端传输文件。这是基本的,但是无法避免上传阻塞问题。2.其次,设置连接超时,数据传输超时等等,也无法避免阻塞。3.接着,调用上传或下载后,调用stream.close()方法,同样无法避免阻塞,这是基本的操作,说明不了什么。4.最后,我在程序中加入了上传下载listener(ftpcl原创 2016-06-16 15:28:19 · 12248 阅读 · 4 评论 -
Java内存模型&JVM参数
1.工作内存和主内存 Java内存模型对顶所有的变量都存储在主内存中(JVM内存的一部分),每个线程有自己独立的工作内存,工作内存保存了当前线程使用的对主内存变量的赋值。线程对这些变量的操作都在自己的工作内存中进行,而不能直接操作主内存和其他线程对应的工作内存中存储的变量或者变量副本。线程间的变量访问需要主内存来完成。原创 2016-10-12 11:53:23 · 413 阅读 · 0 评论 -
优秀Java相关技术博客收藏(一)
一 有关JVM的文章1.http://www.cnblogs.com/dolphin0520/p/3613043.html jvm内存区域划分2.http://www.cnblogs.com/wenfeng762/archive/2011/08/14/2137820.html jvm常量池二 有关java反射文档1. http://blog.csdn.net/yo原创 2016-03-04 15:47:36 · 2805 阅读 · 0 评论 -
java中String的等号、equals、hashcode之间的区别与联系
前一段时间自己想写几行代码,所以就有了以下的代码: public class TestString_1 { public static void main(String[] args) { String str1="this is test"; String str2="this is test"; String str3=new String("this is test"原创 2017-02-14 17:33:10 · 789 阅读 · 0 评论 -
JVM调优总结
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355转载 2017-03-08 11:18:35 · 368 阅读 · 0 评论 -
Java 内存模型与线程
前言并发是计算机发展的成就。(并发,同一时段发生;并行,同一时刻发生)我们知道,早期计算机只能串行的进行运行(最古老的打孔)。而经过多年的发展,计算机可以“同时”做很多事情。但悲剧的是,因为CPU速度和其它设备之间的速度差别太大,比如磁盘IO、网络传输、数据库访问等等,如果不希望CPU在进行这些操作时一直处于等待的状态,就要充分压榨它的性能让它干别的事情。目前在服务器端,衡原创 2017-08-11 12:29:10 · 287 阅读 · 0 评论 -
Java 常见内存溢出异常与代码实现
Java 堆 OutOfMemoryErrorJava 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收, 那么当创建的对象过多时, 会导致 heap 内存不足, 进而引发 OutOfMemoryError 异常./** * @author xiongyongshun * VM Args: java -Xms10m ...原创 2018-04-11 09:52:33 · 1221 阅读 · 0 评论 -
JVM内存管理机制--运行时数据区域(详解)
一、介绍Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的原创 2016-02-23 12:50:56 · 732 阅读 · 1 评论 -
Java中的垃圾回收详解
中对标记删除算法的介绍更多还是偏理论性质的。实践中,为了更好地满足现实的场景及需求,还需要对算法进行大量的调整。举个简单的例子,我们来看下JVM需要记录哪些信息才能让我们得以安全地分配对象空间。碎片及整理(Fragmenting and Compacting)JVM在清除不可达对象之后,还得确保它们所在的空间是可以进行复用的。对象删除会导致碎片的出现,这有点类似于磁盘碎片,这会带来原创 2016-09-14 11:07:35 · 1622 阅读 · 0 评论 -
JVM虚拟机类加载机制(一)
虚拟机类加载机制1.介绍 虚拟机将描述类的数据class文件从本地加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机使用的java类型,这就是虚拟机的类加载机制。这个过程均是在运行时期完成的。其中,每个class文件可能对应系统中的类或接口;原创 2016-02-23 18:33:19 · 521 阅读 · 0 评论 -
JVM虚拟机类加载机制(二)
在java中,类加载器有三种加载器,分别是启动类加载器、扩展类加载器、系统应用类加载器,下面为详细的介绍: 1. 启动类加载器(Bootstrap ClassLoader):这个类加载器负责将存放在JAVA_HOME\lib目录中的或者-Xbootclasspath参数制定的路径中,并且是虚拟机识别的类库加载到虚拟机内存中,它无法被java程序直接引用。 2. 扩展类加原创 2016-02-24 14:48:52 · 490 阅读 · 0 评论 -
JVM常量池
wenfeng762 jvm常量池在jvm规范中,每个类型都有自己的常量池。常量池是某类型所用常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型、字段、方法的符号引用。之所以是符号引用而不是像c语言那样,编译时直接指定其他类型,是因为java是动态绑定的,只有在运行时根据某些规则才能确定具体依赖的类型实例,这正是java实现多态的基础。 为了对常量池有更具体的认识,下面引用几原创 2016-02-23 14:03:52 · 599 阅读 · 0 评论 -
java多线程(一) volatile与synchronized区别
1、锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量原创 2016-03-24 15:03:56 · 518 阅读 · 0 评论 -
java网络socket编程(三)之ServerSocket服务器端
一、简介java提供了一个ServerSocket类表示服务器Socket。服务器Socket在服务器上运行,监听入站ftp连接。每个服务器Socket监听服务器上的一个特定端口。当远程注解上的一个客户端尝试这个端口时,服务器就会被唤醒,协商建立客户端与服务器端的连接,并返回一个常规的Socket对象,表示2台主机之间的Socket。也是就说服务器端Socket接受到客户端Socket发送过来原创 2016-07-13 18:43:14 · 16010 阅读 · 1 评论 -
java网络socket编程(七)之java中NIO实现聊天系统的群聊功能
1.服务器端代码import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.Channel;import java.nio.channels.Selectio原创 2016-08-22 18:14:51 · 3496 阅读 · 1 评论 -
Springboot启动原理解析
我们开发任何一个Spring Boot项目,都会用到如下的启动类@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}从...原创 2019-05-31 10:40:46 · 311 阅读 · 0 评论