快捷搜索:

Java自定义类中重写equals方法,JVM内部存款和储蓄

作者: 手机赌钱游戏大全  发布:2019-10-05

手机赌钱游戏 1Memory.png

手机赌钱游戏 2get.png

回收方法区

有的是人认为方法区(或许HotSpot设想机中的永远代)是一向不污源搜罗的,Java设想机标准中真的说过能够不必要虚构机在方法区完毕垃圾搜集,而且在方法区中展开垃圾搜聚的“性能与价格之间的比例”通常十分低:在堆中,尤其是在新生代中,常规应用实行一遍垃圾搜罗日常能够回收十分九~95%的上空,而恒久代的排放物采摘效用远远小于此

恒久代的污源搜罗首要回收两片段剧情:丢掉常量和无效的类。

一、什么是Springboot

趁着动态语言的盛行(Ruby、Groovy、Scala、Node.js),Java的支付显得非凡的笨重:好多的布局、低下的付出功效、复杂的配置流程以及第三方技艺集成难度大。在上述条件下,Springboot应际而生。它选用"习于旧贯优于配备"(项目中设有大批量的安顿,别的还放置一个习于旧贯性的配备,令你不要手动举行安顿)的理念令你的门类赶快运维起来。使用springboot很轻便成立一个单身运行(运维jar,内嵌servlet容器)、准生育品级的依据Spring框架的类别,使用springboot你能够毫无只怕只须要比非常少的Spring配置。

That's all.

JVM在奉行Java程序时,会把它管理的内部存款和储蓄器划分为多少个的区域,各个地区都有友好的用处和开创销毁时间。如下图所示,能够分为两大学一年级些,线程私有区和分享区:

废话少说,直接上代码:

Parallel Old收集器

Parallel Old是Parallel Scavenge搜罗器的老年代版本,使用八线程和“标志-整理”算法。

三、Springboot入门程序

设置spring boot的parent

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version></parent>

注脚:Spring boot的花色一定要将parent设置为spring boot的parent,该parent蕴含了大气默许的安顿,大大简化了大家的支出。

导入spring boot的web支持

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

添加Spring boot的插件

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>

即pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <groupId>com.hcx.springboot</groupId> <artifactId>hcx-springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- 连接池 --> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp-spring</artifactId> <version>0.8.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <pluginManagement> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </pluginManagement> </build></project>

编辑第贰个Spring Boot的使用

package com.hcx.springboot.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controller@SpringBootApplication //声明这是一个springboot的应用@Configuration //声明该类为一个配置类public class HelloApplication { //springboot的项目命名中,一般都有一个xxxApplication类,该类作为springboot项目的入口类 @RequestMapping @ResponseBody public String hello(){ return "hello world"; } public static void main(String[] args) { /** * 第一个参数:要运行的应用(该应用一定要包含@SpringBootApplication注解) * 第二个参数:直接用args,也可以指定内置参数 */ SpringApplication.run(HelloApplication.class, args); }}

代码表明:

1、@SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置;2、@Configuration:这是一个配置Spring的配置类;3、@Controller:标明这是一个SpringMVC的Controller控制器;4、main方法:在main方法中启动一个应用,即:这个应用的入口;

运营应用

在Spring Boot项目中,运营的点子有二种,一种是直接run Java Application别的一种是由此Spring Boot的Maven插件运营。

第一种:

手机赌钱游戏 3率先种运转形式.png

第二种:

手机赌钱游戏 4其次种运行情势.png

开发银行功用:

手机赌钱游戏 5运行作效果果.png

手机赌钱游戏,观望如下音信就印证运营成功了:

INFO 6188 --- [ main] c.i.springboot.demo.HelloApplication : Started HelloApplication in 3.281 seconds (JVM running for 3.601)

测试

开荒浏览器,输入地点:127.0.0.1:8080/hello

手机赌钱游戏 6启动.png手机赌钱游戏 7效果.png

手机赌钱游戏 8Java自定义类中重写equals方法,JVM内部存款和储蓄器模型的有关概念。重写hashCode方法的原故

2.1.线程私有区
  • 次第计数器。当同一时间开展的线程数超越CPU数或其内核数时,就要通过时间片轮询分派CPU的岁月财富,不免产生线程切换。那时,各类线程就要求八个属于自身的计数器来记录下一条要运转的指令。假设将是Java方法,则记录施行的字节码地址;是地面方法,则计数器为空。
  • 设想机栈,与线程同有的时候候创立。各个方法实行时都会创建三个栈帧来囤积方法的音信,新调用的法子入栈,再次回到的出栈,所以栈的轻重决定方法调用的可达深度。若需求的栈深度超过可用深度时,则StackOverflowError;若栈举办扩张,但内部存款和储蓄器远远不足时,OutOfMemoryError。
  • 本地点法栈,与虚构机栈成效相似。但它不是为Java方法服务的,而是本地点法。由于专门的学问对那块未有强制须要,差异设想机落成形式差异。
<?xml version="1.0" encoding="UTF-8"?><ehcache dynamicConfig="false" monitoring="off" updateCheck="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> <!-- 定义缓存策略 eternal="false" // 元素是否永恒,如果是就永不过期 maxEntriesLocalHeap="1000" // 堆内存中最大缓存对象数,0没有限制 overflowToDisk="false" // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘 diskPersistent="false" // 磁盘缓存在VM重新启动时是否保持 timeToIdleSeconds="0" // 导致元素过期的访问间隔. 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0 timeToLiveSeconds="600" // 元素在缓存里存在的时间. 0 表示永远存在不过期 memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU --> <!-- 1)maxElementsInMemory:在内存中缓存的最大对象数量 2)maxElementsOnDisk:在磁盘上缓存的最大对象数量,默认值为0,表示不限制。 3)eternal:设定缓存对象保存的永久属性,默认为 false 。当为 true 时 timeToIdleSeconds、timeToLiveSeconds 失效。 4)timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。 5)timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。 6)overflowToDisk:如果内存中数据超过内存限制,是否要缓存到磁盘上。 7)diskPersistent:是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 8)diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。 9)memoryStoreEvictionPolicy:如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。 FIFO(first in first out):先进先出 LFU(Less Frequently Used):最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清除缓存。 LRU(Least Recently Used)默认策略:最近最少使用,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清除缓存。 10) maxEntriesLocalHeap 堆内存中最大缓存对象数 --> <diskStore path="java.io.tmpdir"></diskStore> <defaultCache eternal="false" maxEntriesLocalHeap="0" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsInMemory="10000" overflowToDisk="true" diskPersistent="true" /> <cache name="userCache" maxEntriesLocalHeap="10000" /> <cache name="studentCache" maxEntriesLocalHeap="10000" /> </ehcache>

对死去的暗记进程

不畏在可达性深入分析算法中不可达的靶子,也毫不是“非死不可”的,那时候它们一时处于“缓刑”阶段,要真的宣布二个对象病逝,至少要经历一次标志进程。

二、Springbot的得失

优点:

1.快速构建项目;2.对主流开发框架的无配置集成;3.项目可独立运行,无须外部依赖servlet容器;4.提供运行时的应用监控;5.极大地提高了开发、部署效率;6.与云计算的天然集成。

缺点:

1.书籍文档较少且不够深入;2.如果你不认同Spring框架,这也许是它的缺点,但建议你一定要使用Spring框架。
public class A { public boolean equals(Object otherObject) { //测试两个对象是否是同一个对象,是的话返回true if(this==otherObject) return true; //测试检测的对象是否为空,是就返回false if(otherObject==null) return false; //测试两个对象所属的类是否相同,否则返回false if(getClass()!=otherObject.getClass return false; //对otherObject进行类型转换以便和类A的对象进行比较 A other=otherObject; //对于值可能为null的属性,检测时应使用Object的equals方法,不为null的可以直接使用==检测 return Object.equals(类A对象的属性A,other的属性A)&&类A对象的属性B==other的属性B……; } }

Android的设想机是依赖运动设备的风味基于Java设想机改进而来,纵然尚未保存标准,但作为Java语言的使用者,领会一下JVM的正儿八经依然有至关重要的。

GET 获取缓存的数目

Java工夫系统中所提倡的全自动内部存款和储蓄器管理最终得以归咎为自动化地解决了几个难点:给指标分配内部存款和储蓄器以及回收分配给指标的内部存储器。

public int hashCode(){ //其中Double根据需要换成所需类型,第一个乘数因子为素数 return 7*Object.hashCode(有可能为null的属性A)+ 11*new Double(不为null的属性B).hashcode()+ ……}

本文由手机赌钱游戏大全发布于手机赌钱游戏大全,转载请注明出处:Java自定义类中重写equals方法,JVM内部存款和储蓄

关键词: