- 博客(26)
- 收藏
- 关注
转载 JVM常见的七种垃圾收集器的简单比较
1、Serial收集器曾经是虚拟机新生代收集的唯一选择,是一个单线程的收集器,在进行收集垃圾时,必须stop the world,它是虚拟机运行在Client模式下的默认新生代收集器。2、Serial Old是Serial收集器的老年代版本,同样是单线程收集器,使用标记整理算法。3、ParNew收集器是Serial收集器的多线程版本,许多运行在Server模式下的虚拟机中首选的新生代收集器,除Serial外,只有它能与CMS收集器配合工作。4、Parallel Scavenge收集器也是新生代收集器,
2020-07-22 09:05:57
218
转载 判断对象死亡,垃圾回收算法相关
引用计数算法给对象添加一个引用计数器,每当一个地方引用它时,数据器加1;当引用失效时,计数器减1;计数器为0的即可被回收。优点:实现简单,判断效率高缺点:很难解决对象之间的相互循环引用(objA.instance = objB; objB.instance = objA)的问题,所以java语言并没有选用引用计数法管理内存根搜索算法Java和C#都是使用根搜索算法来判断对象是否存活。通过一系列的名为“GC Root”的对象作为起始点,从这些节点开始向下搜索,搜索所有走过的路径称为引用链(Ref
2020-07-22 08:56:08
118
转载 Java四种引用包括强引用,软引用,弱引用,虚引用
Java四种引用包括强引用,软引用,弱引用,虚引用强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用:非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object obj = new Object();Sof
2020-07-22 08:33:22
105
原创 Java虚拟机剖析
Java虚拟机组成结构大概包括:类加载子系统,运行时数据区,执行引擎。1.类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于运行时数据库的方法区中。三个类加载器:启动类加载器Bootstrap拓展类加载器Extension应用类加载器AppClassLoader当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在
2020-07-21 09:22:26
107
原创 关于今天DAO层中报错
由于表中是varchar2类型,导致要插入非纯数字的varchar2字段需要加单引号PS:诸如插入数据时显示:ORA-00984列在此处不允许ORA-00936: 缺少表达式ORA-00904 标识符无效皆有可能是上面的原因。PPS:插入数组时,可以用遍历,然后字符串拼接解决插入的是地址值的问题。PPS:处理结果集时,如果查到了数据,resultset.next返回第一行数据,没有查到返回false采用keyvalue样式储存可以调用getXxx()获取数据。...
2020-07-01 00:43:41
1338
原创 简单了解JVM的内存结构
JVM的内存结构主要分为三个部分:类加载器子系统、运行时数据区、执行引擎。在程序中声明和使用的变量全部都保存在运行时数据区。运行时数据区又分为:方法区、PC寄存器、本地方法栈、堆、Java栈。方法区:方法区中主要是保存类型(类、接口)的信息,包括: 全限类名、直接父类的全限类名、 类中的字段和方法信息、 这个类型是接口还是类、 类的修饰符、 所有实现接口的全限类名。 *除了上述内容之外,还包含一些比较特殊的子级区域: 【常量池】 保存常量 【静态区】 保存类中使用static修
2020-06-26 18:51:16
156
原创 Java中的类加载机制
类加载:当程序中需要使用到某个类的时候(无论是Java API中自带的类,还是我们自己编写的Java类),必须要先把这个类加载到内存中。其实是把保存有这个类描述信息的文件(.class)装载到JVM中。字节码文件中的所有信息会被解析读取出来,变成JVM内存中的一个Class类的对象。ClassLoader类加载器负责到指定的路径中查询.class文件,并且加载到内存中。Java中有三种类加载器:1)BootStrapClassLoader 引导类加载器/启动类加载器(grandpa)主要负
2020-06-26 18:35:46
166
原创 关于代码安全验证机制的知识点
一个Java程序从诞生到最终被执行,总共分为两个大的阶段:1、Compile 编译期1)创建并编写Java源代码文件.java2)使用javac编译器对源代码进行编译,生成.class(字节码文件、类文件、bytecode)3)把.class文件提交给JVM准备运行2、Runtime 运行期1)类加载器把.class文件加载到JVM内存当中2)进行字节码验证验证内容:a)代码必须符合JVM规范b)代码不能破坏系统的完整性c)不能造成堆栈的上溢和下溢d)参数类型必须正确e)类型转换
2020-06-26 16:33:42
456
原创 关于GC垃圾回收器的知识点
GC(Garbage Collection,垃圾回收器)什么是垃圾? --> 垃圾内存 --> 没有用的内存1、取消了内存分配在Java中只有new操作开辟空间,没有任何的操作回收空间。内存空间不需要程序员考虑如何回收。因为有GC的存在,允许我们Java程序员编程的时候“有前手,没后手”。2、Java系统线程自动管理内存GC本质上就是一个后台进程,随着JVM的启动而启动,开始工作,工作在后台。GC会定期地关注内存的使用情况,只会在它认为有必要的时候进行内存的回收和释放。我们可
2020-06-26 16:32:04
161
原创 关于JVM虚拟机的知识点
JVM全称叫做Java Virtual Machine,翻译为Java虚拟机,是Java语言运行的平台。1、编程语言的发展历史第一代:机器语言 由0和1组成的二进制指令第二代:汇编语言 指令有了英文名字 mov add jmp loop…第三代:高级语言 C、C++、C#、Java、Python、PHP…第四代:SQL语言无论是哪一种编程语言、哪一代的编程语言,最终都是要直接或间接地翻译成机器语言交给CPU执行。CPU除了0和1,别的什么都不认识。C语言为什么需要编译?C的源代码我们能看懂
2020-06-26 16:30:16
157
原创 物联网数据中心项目第五天修改
模块化接口1.定义模块化接口,定义init方法模块化接口WossModuleInit,用来对每个模块进行配置初始化。在其中定义所有模块都需要的方法,常用于初始化。将所需要的配置文件信息传递给该类,得到之后进行初始化操作,在执行真正的子类功能方法之前执行该方法。public class ConfigurationImpl implements Configuration{ //存储解析以及反射的实例化对象 private Map<String, WossModuleInit> ma
2020-06-21 00:43:08
169
原创 智能家居数据中心项目第五天
创建备份模块在客户端和服务器端前先读取是否有备份文件,如果有就将返回的集合加入到coll集合中。然后删除。在客户端和服务器端的catch代码块中,添加备份,一旦try块抛出异常,就进行备份。服务器端异常主要指,入库异常,包括数据库服务未开启,密码错误等等。客户端异常等只要指,服务器未开启,连接服务器失败,端口占用,连接拒绝等等。在删除过程中发现一个冷知识,不报错但很闹心,要是甚至没有注意。具体见:https://blog.csdn.net/weixin_44468294/article/detai
2020-06-20 23:51:46
164
原创 智能家居数据中心项目第四天修改
入库模块修改版本一public void save(Collection<Environment> coll) throws Exception { connection = ConnectionFactory.getConnection(); // 表示当前sql语句数 int count = 0; /* * 记录当前天数,默认为0 */ int day = 0; for (Environment environment : coll) { /*
2020-06-20 22:55:57
148
原创 关于File文件的对象调用delete()无法删除对象,但不报错
项目中遇到delete()方法删除文件删除不了,但是不报错。public Object load(String filepath,boolean del) throws Exception { File file = new File(filepath); if (!file.exists()) return null; ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file
2020-06-19 16:29:27
525
原创 Java三个类加载器
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-06-19 16:21:46
1285
原创 智能家居数据中心第三天
DBStore入库模块1.新建Oracle数据库循环建表--使用PL/SQL删除表BEGIN FOR i IN 1..31 LOOP EXECUTE IMMEDIATE 'DROP TABLE e_detail_'||TO_CHAR(i); END LOOP;END;/--使用PL/SQL建表BEGIN FOR i IN 1..31 LOOP EXECUTE IMMEDIATE 'CREATE TABLE e_detail_'||TO_C
2020-06-17 14:50:07
181
原创 序列化ID的作用
序列化ID如何产生当我们一个实体类中没有显示的定义一个名为“serialVersionUID”、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。序列化ID的作用java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本
2020-06-17 14:12:45
506
原创 智能家居数据中心项目第二天
日志模块log4j的应用和学习。匿名代码块实现(父类静态代码块–>>子类静态代码块–>>父类匿名代码块–>>父类构造器–>>子类匿名代码块–>>子类构造器其中静态代码块在初始化时会被调用,但是匿名代码块与构造器只有在创建对象时才会调用。)client端使用socket通信,ObjectOutputOutStream发送coll对象server端使用socket通信,ObjectInputStream接受,多线程的两种实现方法。继承思想和
2020-06-16 21:30:29
162
原创 智能家居数据中心项目修改第一天
项目第二天2.修改版2.1添加了Util的WossModulelnit(模块化)接口2.2Bean包下的Environment中的属性gather_time的类型由Date变为TimeStamp。2.3修改接口改为抛出异常。一般在逻辑层都是抛出异常。2.4改gather()方法中的BufferReader为RandomAccessFile流(可读可写) RandomAccessFile randomAccessFile = new RandomAccessFile("src/main/java/
2020-06-16 21:04:56
133
原创 log4j笔记
Log4jApache开源(http://logging.apache.org/log4j/),轻量的日志管理框架,控制日志信息输出地:控制台,文件,GUI,套接字,NT事件记录器,Unix Syslog守护进程等,控制输出格式,定义日志级别,无需修改代码,配置文件修改日志用途分类:开发调试日志系统运行日志log4j对比System.out.println优势1.分级别控制日志的输出与开关调试阶段写了100system语句,上线时需不需要这些语句?(不需要手动删除,自己就能不输出)2
2020-06-16 14:50:41
107
转载 java的八个日志文件级别详细说明
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL 最低等级的,用于打开所有日志记录。TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行
2020-06-16 14:37:12
545
原创 智能家居数据中心项目第一天
项目第一天1.完成了数据采集模块。1.1 xml读取配置文件 String path = null; SAXReader sax = new SAXReader(); Document document = sax.read(new File("src/main/java/config.xml")); //获取根元素 Element root = document.getRootElement(); System.out.println("获取到的根元素
2020-06-15 18:17:48
142
原创 使用dom4j解析xml文件
String path = null; SAXReader sax = new SAXReader(); Document document = sax.read(new File("src/main/java/config.xml")); //获取根元素 Element root = document.getRootElement(); System.out.println("获取到的根元素" + root); //获取所有的子元素Love..
2020-06-15 18:13:40
119
原创 XML 可扩展标记语言 笔记
XML 可扩展标记语言一、什么是标记语言标记语言就是一种由特定意义的符号组成的文档,这些符号用来指明文档内容的结构和含义。目前常用的标记语言有两种:XML:Extensible Markup Language,可扩展的标记语言HTML:Hyper Text Maryup Language,超文本标记语言标记语言的本质实际上就是一种格式特殊的文本信息。标记语言通常不是给“人”来看的,而是用来给特定的程序解析。HTML通常由浏览器软件解析,用来描述如何绘制网页。XML通常由我们自己编写的
2020-06-12 12:50:39
443
原创 关于maven中install本地jar包出错
解决解决Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install的错误原因:可能由于进程被eclipse占用,无法读取xml文件解决方法:可以关闭eclipse后重新尝试。本人亲测有效,以及解决。...
2020-06-12 11:42:58
698
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人