小编Den*_*nov的帖子

捕获java.lang.OutOfMemoryError?

文档java.lang.Error说:

Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题

但是作为java.lang.Error子类java.lang.Throwable,我可以捕获这种类型的Throwable.

我明白为什么抓住这种例外不是一个好主意.据我所知,如果我们决定捕获它,catch处理程序不应该自己分配任何内存.否则OutOfMemoryError将再次抛出.

所以,我的问题是:

  1. 捕获时是否有任何真实的单词场景java.lang.OutOfMemoryError可能是一个好主意?
  2. 如果我们决定捕获java.lang.OutOfMemoryError,我们怎么能确定catch处理程序本身不分配任何内存(任何工具或最佳实践)?

java try-catch out-of-memory

97
推荐指数
8
解决办法
8万
查看次数

Java中的逃逸分析

据我所知,JVM使用转义分析进行一些性能优化,如锁定粗化和锁定省略.我很感兴趣,如果JVM有可能决定使用转义分析在堆栈上分配任何特定对象.

一些资源让我觉得我是对的.有JVM实际上做到了吗?

java stack allocation escape-analysis

37
推荐指数
2
解决办法
2万
查看次数

Maven surefire插件fork模式

默认情况下,maven surefile插件在隔离(分叉)环境中运行测试.您可以使用以下配置覆盖此行为:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <forkMode>never</forkMode>
      </configuration>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

如果需要调试测试,则应使用此配置代码段.或者您可以通过以下方式简单地运行maven:

$ mvn -Dmaven.surefire.debug tests
Run Code Online (Sandbox Code Playgroud)

这将启动端口5005上的调试器.

我的问题是:分支策略有哪些好处?为什么选择maven构建的默认策略?非福祉策略是不是更直接,因此应该用作默认值(maven是约定优于配置工具,对吧)?

maven-2 fork surefire

24
推荐指数
1
解决办法
3万
查看次数

SocketInputStream.socketRead0()中CPU使用率高的原因

在剖析本土网络应用程序时,我遇到了非常奇怪的(至少对我来说)观察.

几乎所有的时间都花在socketRead0()SocketInputStream课堂的方法上.这并不奇怪,因为我的应用程序在每个请求上都使用远程服务进行联网.奇怪的是,这种方法不仅挂钟时间使用率高,而且CPU时钟时间也很高.我无法理解为什么CPU时间很长,因为如果我的应用程序等待远程服务回复(实际上并不是那么快),那么应用程序本身就没有什么可做的了.所以CPU时间应该很低.

更多观察:

  • 采样模式下的VisualVM显示该方法SocketInputStream.socketRead0()占用时间高达95%(挂钟时间 CPU时间);
  • mpstat (我们使用Linux作为操作系统)显示约90%的用户时间和约1-3%的系统时间(其余为空闲时间);
  • 应用程序部署在专用服务器上;
  • 远程服务也是HTTP Web应用程序.平均响应时间约为100毫秒.平均响应大小约为2Kb.
  • 我的应用程序使用spring RestTemplate来与远程服务进行交互,而不是SocketInputStream直接进行.

现在我只有一个想法 - 也许这是在JVM中调用本机方法的开销(SocketInputStream.socketRead0()原生)?

你怎么看?还有其他原因吗?

java linux performance jvm cpu-usage

17
推荐指数
1
解决办法
3655
查看次数

{过滤}比{查询} Lucene更快吗?

在阅读"Lucene in Action 2nd edition"时,我遇到了Filter可用于Lucene中的结果过滤的类的描述.Lucene有很多重复Query类的过滤器.例如,NumericRangeQueryNumericRangeFilter.

这本书说NRF完全相同,NRQ但没有文件评分.这是否意味着,如果我不需要得分或排序文件文档字段的值,我应该更喜欢Filter荷兰国际集团在Query从性能的角度来看荷兰国际集团?

java lucene

16
推荐指数
2
解决办法
8578
查看次数

Spring + JSP url构建最佳实践

我想知道在JSP中解决Spring控制器是否有任何好的做法.

假设我有控制器:

@Controller
class FooController {

  // Don't bother about semantic of this query right now
  @RequestMapping("/search/{applicationId}")
  public String handleSearch(@PathVariable String applicationId) {
    [...]
  }
}
Run Code Online (Sandbox Code Playgroud)

当然在JSP中我可以写:

<c:url value="/search/${application.id}" />
Run Code Online (Sandbox Code Playgroud)

但是现在很难改变网址.如果您熟悉Rails/Grails,那么现在您可以解决此问题:

redirect_to(:controller => 'foo', :action = 'search')
Run Code Online (Sandbox Code Playgroud)

但是在Spring中有很多UrlMappers.每个UrlMapper都有自己的语义和绑定方案.Rails一样的方案根本不起作用(除非你自己实现).我的问题是:在Spring中有没有更方便的方法来解决JSP中的控制器问题?

spring jsp spring-mvc

14
推荐指数
1
解决办法
3157
查看次数

与其他领域相关的易变语义

假设我有以下代码

private volatile Service service;

public void setService(Service service) {
  this.service = service;
}

public void doWork() {
  service.doWork();
}
Run Code Online (Sandbox Code Playgroud)

修改后的字段标记为volatile,其值不依赖于先前的状态.所以,这是正确的多线程代码(不用担心Service一分钟的实现).

据我所知,从内存可见性的角度来看,读取volatile变量就像输入一个锁.这是因为读取常规变量不能通过读取volatile变量来重新排序.

这是否意味着以下代码是正确的?

private volatile boolean serviceReady = false;
private Service service;

public void setService(Service service) {
  this.service = service;
  this.serviceReady = true;
}

public void doWork() {
  if ( serviceReady ) {
    service.doWork();
  }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency volatile

13
推荐指数
1
解决办法
1892
查看次数

JSP以编程方式呈现

我需要以编程方式呈现JSP页面.据我所知,JSP应该有一些编译器.问题是我可以在没有JspServlet和其他人的情况下直接使用这个编译器吗?我需要的只是文档如何使用JSP编译器(例如,Jasper).

我认为,一些额外的信息可以澄清情况.我不能使用标准的JspServlet.我想以某种方式在编译之前更改源JSP(准确地将两个JSP合并在一起),因此我需要一种方法直接使用JSP编译器从InputStream(或Reader)编译JSP结果.

两个JSP的合并是布局要求.你可以问:"但为什么这个人不使用SiteMesh或类似的东西?".其中一个JSP页面不是静态的.它由用户提供并存储在数据库中.我们清理并验证了这个JSP布局(用户只能使用标签的子集,并且所有这些标签都不是标准的,而是专门为它们创建的),缓存它们等等.但是现在我们需要一种方法来使用这些JSP页面(存储在内存中)作为用户请求的所有JSP页面的布局.

java jsp rendering servlets jstl

13
推荐指数
2
解决办法
2万
查看次数

strace'ing java进程时有很多SIGSEGV

当我调试CI服务器上的一个单元测试(实际上是maven构建)时发生了有趣的事情.我连接到java进程strace -ff -e trace=network -p [pid]跟踪构建过程的网络活动.这就是我所看到的:

Process 26324 attached
Process 26325 attached (waiting for parent)
Process 26325 resumed (parent 26312 ready)
Process 26325 detached
Process 26324 detached
Process 26320 detached
Process 26317 detached
Process 26308 resumed
[pid 26308] --- SIGCHLD (Child exited) @ 0 (0) ---
Process 26307 resumed
Process 26308 detached
[pid 26310] --- SIGCHLD (Child exited) @ 0 (0) ---
Process 26310 detached
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 26309 detached …
Run Code Online (Sandbox Code Playgroud)

java segmentation-fault strace

13
推荐指数
1
解决办法
3848
查看次数

Java非阻塞内存分配

我在某处读到java可以为大约12个机器指令中的对象分配内存.这对我来说非常令人印象深刻.据我所知,JVM使用的一个技巧是在块中预分配内存.这有助于最大限度地减少对操作系统的请求数量,这是非常昂贵的,我想.但即便是CAS操作也可能在现代处理器上花费多达150个周期.

那么,有没有人可以解释java中内存分配的实际成本以及JVM用于加速分配的技巧?

java jvm memory-management

11
推荐指数
1
解决办法
5216
查看次数