Estou com dificuldades de entender o que vc quis dizer, sinceramente.
Uma linguagem não usa mais ou menos memoria. Vc tem um overhead natural dependendo da linguagem mas no fim das contas o programa vai fazer o que vc programou pra ele fazer. Se vc cria muitos objetos, se armazena grandes estruturas, possivelmente vc vai usar mais memória.
Quando estudamos algoritmos, estudamos a complexidade espacial do que estamos fazendo e é possivel estimar a quantidade de memoria necessaria para fazer uma determinada tarefa.
A JVM tem uma série de ajustes no que diz respeito ao gerenciamento de memoria. Se vc não estuda isso, não importa qual linguagem vc vai estudar, vc sempre vai ter problema, mais cedo ou mais tarde.
Por exemplo, é muito comum vc querer cachear o resultado de uma operação para evitar o calculo dela uma segunda vez, e colocar no cache requer memoria. As vezes isso é implicito, por exemplo vc tem o cache de Strings no Java, vc tem o cache dos inteiros entre -127 a 128 ( do Wrapper ), etc. No garbage collector, dependendo de qual vc utiliza e quais as configurações vc pode ter objetos que jamais serão coletados e vão existir por todo o ciclo de vida da aplicação.
Eu vejo vc perguntando sobre segurança, sobre node.js, pra mim vc esta perdido e não sabe se expressar. O que tem haver segurança? No seu caso eu investiria tempo para entender os diferentes garbage collectors, em como fazer fine-tuning, em como fazer profiling do uso de memoria, que padrões de projeto vc pode usar para diminuir o consumo, quais algoritmos vc pode usar que possam ser mais eficientes, etc.
Memoria é apenas um dos items que devemos pensar quando desenhamos uma solução. CPU, I/O, disponibilidade, tudo isso entra no calculo. Vc só troca de linguagem se tem certeza em como analisar o problema atual e em como EXATAMENTE a linguagem y vai ajudar.
Por exemplo, talvez vc encontre uma solução em C++ que seja mais eficiente por ter menos overhead do que Java. honestamente? eu duvido que seja o problema, mais facil vc querer fazer o contrario.
Talvez vc ache uma solução em Erlang que seja mais adequada, agora vc tem que estudar bem para desenhar a sua aplicação numa linguagem funcional. Talvez uma parte dela faça sentido.
Não sei que problema vc quer resolver com Lucene, mas eu acho que o programa em questão é dinheiro e não memoria RAM. Talvez vc esteja lidando com volume de dados e de requests que vc precise de uma solução melhor do que simplesmente um VPS.
De cara eu vejo que vc roda na mesma maquina o Lucene e a sua aplicação. Isso me parece arriscado, não tem como escalar isso ai direito. Uma forma profissional seria vc ter maquinas para o Lucene ( em algum tipo de Cluster ) e maquinas para a sua aplicação, pois elas escalam provavelmente de forma diferentes.
Perceba que vc fala em 4 mil requests simultaneos, porém apenas isso não quer dizer muita coisa. De onde surgiu esse numero? Vc tem um load balancer na frente com max-conn 4 mil? vc sabe qual a rajada maxima? é chute? qual o tempo medio de um request?
com Vert.x vc pode programar em java e ter um estilo de programação não bloqueante que pode te ajudar a servir mais conexões, contudo se a sua aplicação recebe o request e repassa para o Lucene, não é o Java que vc tem que se preocupar e sim o Lucene em si. Provavelmente vc quer dividir isso em varias maquinas para poder trabalhar em paralelo, por exemplo.
Vc abre uma conexão por request ou vc tem um poll de conexões? Isso faz toda a diferença.
Vc tem quantos niveis de cache? precisa?
Seus requests podem ser cacheados do lado do cliente via tempo ou ETAG?
4000 é o seu pior caso?
é muito facil desenvolver uma app para um request. para multiplos vc precisa desenhar a aplicação, precisa de um design adequado. vc pode ter problemas com escrever em log, com coisas que não tem haver com a aplicação original.
Eu jamais consideraria migrar para node.js se eu não soubesse a resposta para ao menos metade dessas perguntas.
ps: esqueci de dizer que muitos mecanismos de busca precisam manter indices e chaves em memoria, as vezes uns 10% do total, para serem realmente eficientes. mais um motivo para isolar em maquinas diferentes ou então em containers/zones diferentes no minimo ( e se vc não sabe como SWAP ou OOM-Killer funcionam, por exemplo, se vc não sabe a diferença em gerenciamento de recursos entre Linux e BSD, eu acho que vc tem poucas chances de sucesso).