java以及java框架
qq_35561207
这个作者很懒,什么都没留下…
展开
-
Java并发(2)----Thread类
将runable对象转变为工作任务的传统方式是把它提交给一个Thread构造器,下面的例子展示了如何使用Thread来驱动LiftOff对象:其中Thread构造器源码如下所示:/* * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY...原创 2019-07-15 14:27:44 · 224 阅读 · 0 评论 -
1.java并发(3)--------多线程去驱动更多的任务
1.下面可以看到所有任务之间是如何相互呼应的:接下来运行如下所示:显示过程如下所示:输出说明如下所示:如果机器是有多处理器,线程调度器将会在处理器之间默默分发线程因此当main()创建Thread对象的时候,它并没有捕获任何对象的引用,情况就不同了,每个Thread都注册了自己为1,2,3,4,以及0,因此也就存在了一个对它的引用,而且在它的任务退出其Run()...原创 2018-11-26 19:22:06 · 123 阅读 · 0 评论 -
java并发(1)----实现runable方法的run()
1.显示如图所示:以下这个run()不是由单独的线程驱动的,它是在main()中直接调用的,这里依旧是使用了线程,但是总是分配给了main()那个线程,如图所示:进行从countDown自减操作:当countDown为0的时候,也就会去执行Thread.yield()这个方法。当countDown为-1则结束run()方法:执行结束之后如下: ...原创 2018-11-26 16:33:59 · 444 阅读 · 0 评论 -
1.JVM内存溢出之虚拟机栈和本地方法栈溢出
1.理论支持依据有: 当方法被调用的时候,创建栈帧,并压入虚拟机栈,方法执行完毕之后* 栈阵出栈并且被销毁详细过程如下图所示:虚拟机栈有一个十分明显的特点是隔离性是十分的好的:每个线程都有自己独立的虚拟机栈其中虚拟机栈的StackOverflowError原理如下所示: 若单个线程请求的栈深度大于虚拟机允许的深度,则会抛出StackOverflowError(...原创 2018-11-23 15:48:45 · 756 阅读 · 0 评论 -
1.JVM之内存溢出之------堆内存溢出
1.首先介绍一下,java堆内存溢出测试:如下图所示:往list数组中添加一个静态类的实例化对象不断的区重新建设如new OOMobject()使用JMj监控工具可以得知:其实有交叉的地方出现了周期性的溢出:输出的具体代码如下所示:Exception in thread "main" java.lang.OutOfMemoryError: Java heap s...原创 2018-11-23 15:16:49 · 167 阅读 · 0 评论 -
1.JVM参数如何查看
1.首先,在jDK的bin目录下点击运行该exe程序,如下所示:首先给VisualVM点赞,这个工具非常的好用 点开过后运行界面如下所示: 我个人试用的IDE是IDEAVisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe)。Vis...原创 2018-11-23 14:33:23 · 1862 阅读 · 0 评论 -
1.linux众多内存以及CPU占用率查询
1.使用命令cat /proc/meminfo根据以上命令可以得知:memtotal:3881812Kb其物理内存是3.8G可供剩余调用的内存是106184也就是103M:以下就是测量一个进程在运行的时候占用了多少个内存的验证方法:内存空间比较大了,来验证一下:此时引用一个spoon的内存调度看一下:验证结果如下所示:...原创 2018-11-23 11:10:45 · 97 阅读 · 0 评论 -
1.优化JVM方案之相关监控工具的安装
1.在根目录下书写ps aux|grep java发现无法进行shell安装一下shell的工具,进行使用:过程如上所示:原创 2018-11-23 10:36:15 · 80 阅读 · 0 评论 -
1.调优JVM的内存分配不足的问题,安装JVM监测工具as.sh,linux条件下
1.首先安装工具:安装过程和安装命令如下所示:具体的安装命令如下图所示,安装成功之后就是as.sh原创 2018-11-23 10:23:37 · 476 阅读 · 0 评论 -
1.用构造器确保初始化
根据此图以及注释可以得知这是默认的构造方法:在创建对象的时候 new是创建对象的方式之一,其中在创建对象时,并调用其构造方法,默认是无参构造方法,这就求...原创 2018-11-19 20:10:43 · 112 阅读 · 0 评论 -
Java并发(4)------使用Executor
1.Executor为我们去管理Thread对象,从而简化了并发编程。Executor在客户端和任务执行之间提供了一个间接层;与客户端直接执行任务不同,这个中介是执行任务的,Executor允许你管理异步任务的执行,而无需去管理线程的生命周期,Executor是SE5以上的启动任务的优选方法。代码如下所示;1其根本原因是调度一个线程池,帮助我们去管理线程:线程原始状态如下所示:...原创 2018-11-26 19:57:52 · 265 阅读 · 0 评论 -
Java并发(4)----fixedthreadPool使用有限的线程执行所提交的任务
1.目前使用线程池对象建立了两个线程,然后,放在线程池中,其中一个线程已经完成,另一个线程还在激活状态,进行执行:exec的对象始终调用的是当前的线程,进行调用,其中线程是通过引用存放在线程池中的显示结果如下所示:"C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" "-javaagent:D:\IDEA_JAVA\Inte...原创 2018-11-26 20:15:55 · 260 阅读 · 0 评论 -
1.JavaGC回收机制
1.回收的原因:如果不进行垃圾回收,内存迟早会被全部耗空,因此垃圾回收是必须的。2.需要回收的对象是什么?解答:那些内存是需要去回收,是回收机制第一个需要考虑的,回收的就是不可再被使用的对象。JVM内存分区模型:Hotpot VM是把Heap Area分为young generation和oldgeneration两个物理区域,也就是常说的新生代和老生代。特征如下:...原创 2019-06-04 16:14:14 · 146 阅读 · 0 评论 -
1.socket网络编程
package com.pd;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.apache.jasper.tagplugins.jstl.c...原创 2019-03-09 14:07:58 · 155 阅读 · 0 评论 -
基于GC的回收集
x相关的代码显示如下所示|:public class Book { Boolean Checkout=false; Book(Boolean checkout) { checkout=checkout;} void checkIn(){ Checkout=false; } protected void finalize(){ if(C...原创 2019-03-08 22:33:34 · 207 阅读 · 0 评论 -
1.java之对象的建立
java中创建对象的三种方式为:1》clone()2》反序列化3》使用new关键字进行创建对象。创建过程如下所示:1.虚拟机遇到一条new指令的时候,首先将检查这个指令的参数是否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载,解析和初始化过 。虚拟机会深入到class的层次。如果没有,那么就必须要先执行相应的类加载过程。在类加载检查通过后,虚拟...原创 2019-01-11 20:40:46 · 200 阅读 · 0 评论 -
1.JVM特性之java内存区域与内存溢出异常
JVM是java的虚拟机,java虚拟机在执行java程序的时候会把管理的内存划分为若干个不同的数据区域这些区域都有自己各自的用途,以及创建和销毁的时间,有的随着虚拟机进程的启动而存在,有的依赖于线程的启动和结束而建立和销毁,根据官方规范,java虚拟机所管理的内存会包括以下几个运行时的数据区域。方法区(Method Area),虚拟机栈(VM stack),本地方法栈(Native Me...原创 2019-01-11 20:07:38 · 128 阅读 · 0 评论 -
1.java编程思想之初始化与清理
java是带无参的构造方法,根据编译器提示如下所示:class Rock{ Rock(){ System.out.println("rock"); }}public class SimpleConstructor { public static void main(String[] args){ for (int i=0;i<10;...原创 2019-01-11 17:01:39 · 136 阅读 · 0 评论 -
1.线程安全
package java并发之核心;//数据共享性是线程安全的主要原因之一,数据库,多数据线程下共享数据的问题。public class shareData { public static int count=0; public static void main(String[] args) { final shareData data = new shar...原创 2019-01-11 14:03:48 · 107 阅读 · 0 评论 -
1.Java并发之-------单线程单任务进行运行
结果如上图所示:跟入代码如下:具体实现如下所示:对比之前的并发就可以理解了,详细代码如下所示:import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CachedThreadPool { public static voi...原创 2018-11-27 09:29:45 · 3570 阅读 · 0 评论 -
1.JVM的类加载机制
1.类从被加载到虚拟内存中开始,到卸载出内存为止,整个生命周期包括,加载---》验证--》准备-->解析---》---》初始化--》使用---》和卸载的过程其中验证,准备,解析3个阶段统称为连接。(0)在遇到new getstatic, pustatic 或者invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化使用场景如下:new 关键...原创 2018-11-19 19:17:49 · 101 阅读 · 0 评论 -
组合。继承以及多态在构建顺序上的作用
class Meal{ Meal(){ System.out.println("meal()函数被调用"); } }class Bread{ Bread(){ System.out.println("bread()函数被调用"); }}class cheese{ cheese(){ Sy...原创 2018-11-22 11:15:06 · 93 阅读 · 0 评论 -
1.Jconsole:Java监视与管理控制台
JConsole是一种基于JMX的可视化监视,管理工具,他管理的部分功能是针对JMX MBean进行管理,启动JConsole如上所示:启动过后界面如下所示:启动过后将会自动搜索出本机自动启动的虚拟进程: debug进行验证: ...原创 2018-11-23 19:55:07 · 176 阅读 · 0 评论 -
String.intern
1.根据之前发布的博客可以得知:(1)新建一个对象是建立在堆中进行操作。new 不同的对象会在堆中,实现不同的对象,即使对象名是相同的,调用string。intern()方法将会将对象名放到常量池中,使用了string.intern()方法过后,此时当string2=“abc”将会指向常量池中的abc对象,不再去进项查询。 ...原创 2018-11-15 14:22:55 · 62 阅读 · 0 评论 -
JVM核心之-----本机直接内存溢出(Unsafe分配本机内存)
原创 2018-10-30 20:00:32 · 594 阅读 · 0 评论 -
JVM之常量池导致的内存溢出异常问题
1.代码运行的时候常量池是方法区的一部分,使用string.itern()是一个Native方法,如果字符串常量池中已经一个等于此String对象的字符串,则返回池中这个字符串的string对象,否则将string对象包含的字符串添加到常量池中,并且由此返回此string对象的引用。 ...原创 2018-10-17 15:17:04 · 856 阅读 · 0 评论 -
jvm之java创建线程导致内存异常
1。以下线程启动,请注意保存当前工作,因为jav的线程是映射到操作系统的内核线程上,下面代码执行,容易导致操作系统假死会导致部署代码的缺失,运行以上程序会导致如下结果如:请强制结束以下进程。分析如下:java的线程运行是映射到操作系统的内核线程上的。因此可以涉及到内核的一些东西。内核是管理系统进程和内存的。内核概念扩充:(来自百度百科)内核,是一个操作系统的核心。是...原创 2018-10-17 14:53:50 · 798 阅读 · 0 评论 -
JVM之java堆溢出
1.java堆用于存储对象,只要不断的创建对象,并保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出的现象。Java是自动管理堆栈内存的,因此程序员会比较被动,无法自行去设置堆栈大小。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。因此可以得知:...原创 2018-10-17 13:56:24 · 124 阅读 · 0 评论 -
spring boot整合redis实战
1.spring boot整合redis,此次项目有进行maven的相关配置工作,整个代码结构目录如下:其中pom文件绑定相关的redis的参数步骤如下:其中<dependency>依赖当中进新配置了相关的redis依赖,也就是spring-boot-starter-data-redis。其中通过注解来对redis进行相应的绑定单独的文件进行redis的数据...原创 2018-10-10 15:37:45 · 627 阅读 · 0 评论 -
spring boot学习札记三
1.根据一下图:可以得知在spring boot中使用了@restcontroller的注解,该注解的一个重要的作用可以理解为是:取代了jakson.jar的作用将json格式传过来的数据格式转换为java可以去识别的东西。根据前端传过来的方法可以得知:@postMapping对应的请求方式,其中这个例子是post请求方法。@RestController的意思就是c...原创 2018-10-09 16:06:46 · 91 阅读 · 0 评论 -
spring boot学习笔记二
在service进行相关的代码的逻辑处理之后,需要去mapper中进行相关的sql的执行操作。@Overridepublic PageInfo<Map<String, Object>> pageList(RequestPage page) { PageHelper.startPage(page.getPageNum(), page.getPageSize(...原创 2018-10-09 15:48:53 · 373 阅读 · 0 评论 -
spring boot学习札记
1.适合有ssm技术背景的同学进行学习。spring boot可以理解为整合了所有的框架,就像maven是整合了所有的jar包一样,而spring boot是整合了框架的一个应用。其中spring boot搭建好之后,建议分成四个模块儿(1)其中Applicationzuo作为配置最好放在根目录下,并且作为程序启动项:如图:其中domain放数据访问层,如图:其中...原创 2018-10-09 14:29:35 · 95 阅读 · 0 评论 -
1.java一切即对象以及java内存模型与线程
由此可以得知:代码完成之后进行本地配置的一些读取操作:至此可以得知其编译模式是mixed模式的new date()默认输出的结果是import中包的默认构造函数初始化后的结果:观看Date类源码即可得知:鉴于java是单继承关系,由此来看一下import的传递过程,如下所示:如下所示: volatile运算;/** * volatile变量...原创 2018-11-20 17:13:40 · 101 阅读 · 0 评论 -
1.JVM之对Vector线程安全的测试(相对线程安全)
import java.util.Vector;public class vector { private static Vector<Integer> vector=new Vector<>(); public static void main(String[] args){ while(true){ for ...原创 2018-11-21 16:13:10 · 458 阅读 · 0 评论 -
继承与初始化
1.下一步:输出结果如下:详细验证代码如下所示:class father{ private int i=9; protected int j; father(){ System.out.println("father中的i="+i+"\nfather中的j="+j); j=39;//将j进行重新赋值...原创 2018-11-22 10:48:48 · 90 阅读 · 0 评论 -
final类
1.根据验证代码可以得知,final定义的类是无法被继承的:理论基础:final类的域是可以根据个人意愿选择是final或者不是final的,不论类是否被定义为final相同规则同样适用于定义于fianl因为final类是禁止被继承的,因此,final类的定义的所有方法是默认为final的,隐式指代为final,因为是无法去进行覆盖的,在final类中给final添加final修饰词是...原创 2018-11-22 10:19:52 · 1246 阅读 · 0 评论 -
final方法的使用
1.final方法的使用原因有两个,1.把方法锁定,以防止任何继承类来修改它的含义,确保在继承中方法行为保持不变,并且不会被覆盖。final和private关键字:类中所有的private关键字都是隐式地指定为final,由于无法去取用private的方法,因此也就无法去覆盖他,但是可以对private添加final修饰词,但是并不能给该方法增加任何额外的意义如果是尝试覆盖一个priv...原创 2018-11-22 10:09:22 · 4223 阅读 · 0 评论 -
final参数
1.先来看一下运行结果如下所示:由此再次验证可以得出,final定义的东西是可以被改变,但是不能指向重新引用的对象。因此这个g =new mo()的初始化操作也是非法操作:看下执行过程,如下所示:final定义的参数,你可以进行调用但是却无法去进行改变这个参数完整示例代码如下:可供验证的代码操作如下所示:class mo{ private ...原创 2018-11-22 09:42:11 · 247 阅读 · 0 评论 -
1.空白final
java允许生成空白final,所谓空白final是指被声明为final但是又未给定初值的域,编译器都确保空白final在使用前必须被初始化。因此一个类中的final域可以根据对象的不同而不同,却保持其恒定不变的特性。java中是允许去进行定义空白final的将其进行初始化的构造方法不写的话,将会报错,如下图所示:但是当添加相关的构造方法之后,即可进行相关的赋值没也就不会出...原创 2018-11-22 09:19:20 · 417 阅读 · 0 评论 -
1.运行时常量池导致内存溢出异常的实现
其中intern()是本地native方法的一种;具体的验证过程见下图:一直到后期去不断的去增加intern()直到将方法区溢出:通过VM对程序进行监控如下所示:显示如下:此时进行内存溢出的时PerGem space的这种情况:详细验证代码如下:import java.util.ArrayList;import java.util.Lis...原创 2018-11-23 17:05:24 · 726 阅读 · 0 评论