我已经配置了我的 Linux 远程计算机(使用 JRE 1.7)来执行具有 jmx 必要属性的 java 应用程序:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=5005 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar myapplication.jar
Run Code Online (Sandbox Code Playgroud)
现在,在我的 Windows 本地计算机(其中有 JDK 1.7)中,我想使用 jmap 工具,例如打印直方图:
jmap -histo 10.218.72.227:5005
但它因以下错误而失败:
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
Attaching to remote server 10.218.72.227:5005, please wait...
Error attaching to remote server: java.rmi.NotBoundException: Not bound: "SARemoteDebugger" (only bound name is "jmxrmi")
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以使用 jconsole 成功连接,但首先它会提示我一条消息,要求我不安全地重试连接(没有 SSL):

因此,它似乎应该是 jmap 的某种标志才能工作,您知道如何克服这个问题吗?
我正在研究一个函数,它连续扫描大量相对较短的字符串,并从中生成大量子字符串。该函数将用于大容量字符串处理系统。我更喜欢首先优化内存,然后再优化 CPU,因为系统上的内存压力大于 CPU 压力。在这种情况下,性能如何比较:
//Java-ish PseudoCode
functionParent(List<String> strings) {
StringBuilder result;
for(String s : strings) {
result.appendAll(functionA(s));
}
}
functionA(String arg1) {
results.add(arg1.substring(i, i + length)); //hotspot here
}
Run Code Online (Sandbox Code Playgroud)
和:
//Java-ish PseudoCode
functionParent(List<String> strings) {
StringBuilder result;
for(String s : strings) {
result.appendAll(functionB(s.toCharArray()));
}
}
functionB(char[] arg1) {
results.add(new String(arg1,i, length)); //hotspot here
}
Run Code Online (Sandbox Code Playgroud)
据我到目前为止的测试来看,内存方面这是一次清洗(char[] 分配可以忽略不计并且不会影响 GC,两者都会创建相同数量的新字符串/ substring() 内存泄漏不久前已修复),并且由于不断查找子字符串,因此 char[] 版本在 CPU 方面获胜。这听起来正确吗?我的分析中是否遗漏了任何内容?
根据下面的答案,解决方案的注释
functionB似乎是最快的。另请注意, functionParent 中有一个 StringBuilder - 并且 StringBuilder 有一个 1append(char[], index, length)` 函数
编译 libgdx 游戏时,我从 android-studio 收到以下错误:
Error: Default interface methods are only supported starting with
Android N (--min-api 24): com.hgames.core.item.Item
com.hgames.core.item.misc.MiscItem.deepClone()
Run Code Online (Sandbox Code Playgroud)
我不明白,因为我不使用默认的接口方法。我的代码在 JDK1.7 上编译得很好。这里报告的错误涉及以下代码:
interface Item {
Item deepClone()
}
interface MiscItem extends Item {
@Override
MiscItem deepClone()
}
Run Code Online (Sandbox Code Playgroud)
那里没有默认方法。请注意,如果我删除此覆盖,并在调用站点添加对 MiscItem 的强制转换,编译器会报告下一个错误(同类),因为我在许多地方使用此模式。我正在使用 gradle 并在我的 build.gradle 文件中包含以下内容:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
defaultConfig {
minSdkVersion 9
targetSdkVersion 15
compileSdkVersion 15
versionCode 1
}
Run Code Online (Sandbox Code Playgroud)
我是 android-studio 的新手,因为我通常使用 Eclipse,但切换到 android-studio 将我的游戏移植到 Android。所以也许我错过了一些愚蠢的东西,但我在任何地方都找不到任何帮助。
我在https://editor.swagger.io中加载了一个 OpenAPI YAML 文件,并从那里生成了 jaxrs-resteasy 的服务器代码。
问题是此代码必须集成到 Java 7 项目中,并且 Swagger 编辑器会生成 Java 8 的代码。
有没有办法生成 Java 7 的 jaxrs-resteasy 服务器代码?
PS: 考虑到有关 JDK 实现细节的动机或权衡的讨论经常会在 StackOverflow 上遇到阻力,普遍认为 JDK 工程师有权独立做出决策(之前关于 JDK 动机的帖子的关闭证明了这一点) ,我想澄清的是,这个问题严格集中在 HashMap 的算法和结构方面,特别是在两个单独的链接实现(头插入和尾插入)之间进行选择时涉及的分析和工程考虑。
在单独链接的HashMap 中,冲突是通过链接列表中的链接条目来管理的。当发生冲突时,新元素可以插入到链表的头部或尾部。两种方法具有相同的最坏时间复杂度,因为需要对列表进行完整扫描来识别重复项或插入点。然而,传统智慧和算法教育(例如,Sedgewick 的算法来源,算法简介,CLRS p.258)表明最好在头部插入,因为较新的元素更有可能很快被访问。
奇怪的是,虽然 JDK7 HashMap(第 402、766 行和JDK 7 源代码addEntry()中的方法)通过在头部插入来遵循此约定,但JDK8 切换到尾部插入(第 611、641 行和JDK 8 源代码中的方法)。putVal()
我的问题是:在单独链接的 HashMap 中,头部插入和尾部插入之间的权衡是什么?是否存在可能影响此选择的实际工程考虑因素(例如多线程问题)?我遇到过一些讨论(例如,此博客),表明如果同步不正确,在头部插入可能会导致死循环。任何人都可以提供有关此主题的见解或更多资源吗?
注意:我正在寻求深入的技术分析以及任何相关的经验或资源。感谢你的贡献!
正如我在阅读这篇关于JDK 7中新的invokedynamic字节码指令的帖子所理解的那样,它可以调用对象类中没有静态定义的对象上的方法,并将这些方法调用解析为某些具体的静态方法.其他类通过拦截方法调用目标分辨率(帖子给出一个例子).
这是否意味着Java 7类可以使用Scala之类的隐式方法?如果不是,Scala中的隐式方法解析与invokedynamic方法解析有何不同?
我是.net开发人员.最近,我对比较java和c#感兴趣.我发现Java的try-with-resources相当于C#的使用块.但是,我无法完全理解它.我知道C#的using块是一种语言特性,编译器为它生成代码.我希望对资源尝试有更多的了解,并且几乎没有问题:
它是一个类似于C#使用块的语言功能吗?
以下内容的等效JDK 6代码是什么:
try(SomeResource resource = new SomeResource())
{
//Some logic
}
Run Code Online (Sandbox Code Playgroud)以下内容的等效JDK 6代码是什么:
try(SomeResource resource = new SomeResource())
{
//Some logic
}
catch(SomeException ex)
{
}
Run Code Online (Sandbox Code Playgroud)什么是Java相当于C#的Reflector或ILSpy工具?即工具来反汇编Java字节码类文件并查看它的Java代码.
我想为用户创建一个大文本字段来输入内容.我还希望它使用默认的系统字体来匹配预期的外观.所以我尝试使用JEditorPane和默认构造函数,它使用纯文本编码.
JEditorPane editorPane = new JEditorPane();
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

这样做的问题在于,纯文本编码不会在每个单词的末尾换行到换行符,只有当它用完字符时才会换行.
我尝试使用HTML编码,这个词包装:
JEditorPane editorPane = new JEditorPane("text/html", "");
editorPane.setText(gettysburgAddress);
Run Code Online (Sandbox Code Playgroud)

这有自动换行,但它默认为不同于系统默认的字体(Mac OS X上的Helvetica,我不想要.
我怎样才能充分利用这两个方面:自动换行和系统默认字体?我不需要任何特殊的格式或任何东西,所以如果可能的话,纯文本编码将会做.
背景
我是Java新手,今天我开始学习它(使用thenewboston.org).我已经知道如何制作简单的windows/forms/gui,如何画线等.
我的目标是在Java规范中创建如下:

这是我在.NET C#WPF中创建的标尺,现在我想将其重写为Java.
主要问题:
如何创建具有一定透明度的三角形或其他形状并旋转它?
我尝试使用这样的Graphics对象绘制一些东西:
public void paint(Graphics g){
g.drawLine(0, 0, 100, 100);
}
Run Code Online (Sandbox Code Playgroud)
但我认为这是错误的方向,因为当我在图形上放置东西时 - 它只是停留在那里,我无法移动或旋转它.
我必须清除整个图形并再次绘制它以制作一种"动画",还是有更简单的方法?
编辑:我已经知道如何抗疟(Hovercraft Full Of Eels已经帮助了我 - 谢谢).
EDIT2:
我的代码实际上是这样的:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainWindow extends JPanel {
private Point p1 = new Point(100, 100);
private Point p2 = new Point(740, 450);
public MainWindow() {
this.setPreferredSize(new Dimension(800, 600));
}
@Override …Run Code Online (Sandbox Code Playgroud) 我有以下情况:
try{
// Do some things that can cause the exceptions
}
catch(SomeException ex){
doSomething();
}
catch(SomeOtherException ex){
doSomething();
}
catch(AndYetAnotherException ex){
doSomething();
}
catch(Exception ex){
// Do something else
}
Run Code Online (Sandbox Code Playgroud)
在Java v7 +中,我可以将其更改为:
try{
// Do some things that can cause the exceptions
}
catch(SomeException | SomeOtherException | AndYetAnotherException ex){
doSomething();
}
catch(Exception ex){
// Do something else
}
Run Code Online (Sandbox Code Playgroud)
由于Android尚不支持Java 7+,我无法使用上述内容.相反,执行以下操作有哪些风险:
try{
// Do some things that can cause the exceptions
}
catch(Exception ex){
if(ex instanceof SomeException || ex …Run Code Online (Sandbox Code Playgroud)